生活随笔
收集整理的這篇文章主要介紹了
xml解析之dom、dom4j、SAX
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、XML:
1、概念:可擴(kuò)展標(biāo)記語言,標(biāo)簽都是自定義的,就是一個記錄,不需要編譯
2、xml與html的區(qū)別:
1、html標(biāo)簽是預(yù)編譯的,xml標(biāo)簽是自由發(fā)揮的
2、html主要是用于頁面展示,xml拿來存數(shù)據(jù)的
3、html5也是目前跨平臺開發(fā)的一個比較火的,它是html4+xml延伸出來的
3、基本結(jié)構(gòu):
1、第一行都是聲明xml的信息,版本之間區(qū)別挺大的,使用時(shí)要注意。
2、下面部分就是文檔的描述,例如有:元素節(jié)點(diǎn)(),屬性節(jié)點(diǎn)id,文本節(jié)點(diǎn)
4、總結(jié)xml標(biāo)簽的語法注意:
1、必須有根節(jié)點(diǎn)
2、xml元素必須有結(jié)束標(biāo)簽
3、對大小寫敏感
4、必須正確嵌套
5、同級標(biāo)簽縮進(jìn)對齊
6、元素名稱遵循駝峰命名(不能有空格)
5、xml解析器:
1、驗(yàn)證解析器:
1、主要為了檢查dtd文件,(就相當(dāng)于導(dǎo)包),例如mybaties框架哪些網(wǎng)址后綴都有dtd的,自己留意下
2、非驗(yàn)證解析器:專門檢查xml語法
6、xml命名空間:(就是同一個xml文件避免出現(xiàn)同名的根標(biāo)簽,注意是根元素)
1、用前綴解決這種命名沖突,例如(f:books)
7、解析xml:
1、把它轉(zhuǎn)化成一個dom對象,dom解析(還有其他的解析方法,dom4j解析(就是對dom的封裝)、sax解析(主要用于移動端解析))
二、dom解析應(yīng)用:
1、把xml文件轉(zhuǎn)換成dom對象的步驟:
1、得到解析器工廠對象:DocumentBuilderFactory.newInstance();
2、得到真正的解析器對象:dbf.newDocumentBuilder();
3、得到xml文件的路徑:File file=new File(“src/xml名字.xml”);
4、把文件轉(zhuǎn)換成dom對象:doc=db.parse(file);//返回值就是Document對象doc
2、得到Brand標(biāo)簽的屬性值以及其子類標(biāo)簽的屬性值:1、得到標(biāo)簽名為Brand的集合:doc.getElementByTargetName("Brand");2、遍歷上面那個集合:有點(diǎn)不一樣是用集合.getLength()得到集合長度3、然后再遍歷里面得到每一個Brand的具體節(jié)點(diǎn):Node node=集合.item(i);4、然后將內(nèi)個具體節(jié)點(diǎn)強(qiáng)轉(zhuǎn)轉(zhuǎn)為標(biāo)簽節(jié)點(diǎn):Element eleName=(Element) node;5、輸出標(biāo)簽名屬性為name的屬性值:String str=eleName.getAttribute("name");6、輸出即可。3、 刪除一條屬性name是三星的Brand標(biāo)簽:1、得到Brand標(biāo)簽集合:doc.getElementByTargetName("Brand");2、for循環(huán)遍歷得到的集合:注意用listBrand.getLength();3、得到具體Brand的節(jié)點(diǎn):listBrand.item(i);//得到一個obj對象4、強(qiáng)轉(zhuǎn)節(jié)點(diǎn)為標(biāo)簽節(jié)點(diǎn):Element eleBrand=(Element) obj;5、判斷標(biāo)簽節(jié)點(diǎn)的屬性name的值是否等于三星:if(eleBrand.getAttribute("name").equals("三星"));6、是就刪除:eleBrand.getParentNode().removeChild(eleBrand);4、增加一條屬性為name="華為"Brand標(biāo)簽,里面還有一個子標(biāo)簽type,屬性為name="華為note3":1、創(chuàng)建一個Brand標(biāo)簽:doc.createElement("Brand");2、創(chuàng)建一個type標(biāo)簽:doc.createElement("type");3、給Brand標(biāo)簽添加屬性以及值:eleBrand.setAttribute("name","華為");4、給type標(biāo)簽添加屬性以及值:eleType.setAttribute("name","華為note3");5、將type標(biāo)簽放到Brand標(biāo)簽中:eleBrand.appendChild(eleType);6、將整個Brand標(biāo)簽放到根標(biāo)簽里:doc.getElementByTargetName("phone").item(0).appendChild(eleBrand);5、給所有Brand標(biāo)簽增加一個屬性id,而且有值:1、得到Brand標(biāo)簽集合:doc.getElementByTargetName("Brand");2、for循環(huán)遍歷得到的集合:注意用listBrand.getLength();3、得到具體Brand的節(jié)點(diǎn):listBrand.item(i);//得到一個obj對象4、強(qiáng)轉(zhuǎn)節(jié)點(diǎn)為標(biāo)簽節(jié)點(diǎn):Element eleBrand=(Element) obj;5、eleBrand.setAttribute("id",i+1+"");6、將新內(nèi)容寫入xml文件:public void writeXml(String path){//得到一個轉(zhuǎn)換器工廠對象TransformerFactory tsf=TransformerFactory.newInstance();//得到轉(zhuǎn)換器對象Transformer ts=tsf.newTransformer();//設(shè)置轉(zhuǎn)換器格式為utf-8ts.setOutputProperty(OutputKeys.ENCODING,"utf-8");//得到DOMSource對象,參數(shù)是DOM對象docDOMSource ds=new DOMSource();//得到ResultStream對象ResultStream rs=new ResultStream(new OutputStreamWriter(new FileOutputStream(path),"utf-8"));//利用transform方法進(jìn)行轉(zhuǎn)換,第一個參數(shù)是DOMSource對象,第二個是ResultStream對象ts.transform(ds,rs);}
三、dom4j的使用:(其實(shí)就是dom封裝好的框架)
前戲?qū)雂om4j包
1、得到DOM對象:
1、SAXReader sr=new SAXReader();2、doc=sr.read(new File("src/phone.xml"));2、得到Brand標(biāo)簽的屬性值以及其子類標(biāo)簽的屬性值:1、得到根節(jié)點(diǎn):Element rootEle=doc.getRootElement();2、利用根節(jié)點(diǎn)得到標(biāo)簽迭代器:Iterator rootIterator=rootEle.elementIterator();3、while循環(huán)4、得到Brand節(jié)點(diǎn)對象:Object obj=rootIterator.next();5、強(qiáng)轉(zhuǎn)為標(biāo)簽節(jié)點(diǎn):Element brandEle=(Element) obj;6、得到屬性值:String value=ele.attributeValue("name");//輸出即可7、通過Brand標(biāo)簽節(jié)點(diǎn)得到迭代器:Iterator brandIterator=rootEle.elementIterator();8、while循環(huán)9、得到所有Brand下的節(jié)點(diǎn):Object obj2=brandIterator.next();10、強(qiáng)轉(zhuǎn)為標(biāo)簽節(jié)點(diǎn):Element brandEle=(Element) obj2;11、得到屬性值:String value2=ele.attributeValue("name");//輸出即可3、添加新的標(biāo)簽student1、得到根節(jié)點(diǎn): Element rootEle=doc.getRootElement();2、直接添加新標(biāo)簽:Element studentEle=rootEle.addElelment("student");3、給新標(biāo)簽添加屬性:studentEle.setAttributeValue("name","Sandy");//多個就寫多幾個就可以了4、給原有的所有student添加一個id屬性1、得到根節(jié)點(diǎn):Element rootEle=doc.getRootElement(); 2、得到迭代器:Iterator rootIte=rootEle.elementIterator();3、while循環(huán)4、得到每個節(jié)點(diǎn)對象:Object obj=rootIte.next();5、強(qiáng)轉(zhuǎn)為標(biāo)簽節(jié)點(diǎn):Element ele=(Element) obj; 6、添加屬性以及值:ele.setAttributeValue("id",num+"");//這里num靠上幾步的num++可以得到1、2、3 5、將新DOM對象寫入xml文件:1、得到opf對象:OutputFormat opf=OutputFormat.createOutputFprmat();2、設(shè)置輸出格式:opf.setEconding("utf-8");3、利用核心XMLWriter xw=new XMLWriter(new FileOutputStream(new File(path),opf));//這里的path是靠傳參進(jìn)來的,opf對象在上面想辦法搞出來4、可以把新DOM讀到指定xml文件:xw.write(doc);
總結(jié)
以上是生活随笔為你收集整理的xml解析之dom、dom4j、SAX的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。