XML总结
1 解析XML目的
獲取節(jié)點(diǎn)名、節(jié)點(diǎn)值、屬性名、屬性值
2 獲取xml文件內(nèi)容的四種解析方式
DOM SAX DOM4J JDOM
DOM、SAX :java 官方方式,不需要下載jar包
DOM4J、JDOM :第三方,需要網(wǎng)上下載jar包
3 DOM使用步驟
3.1 準(zhǔn)備工作
1、創(chuàng)建一個(gè)DocumentBuilderFactory的對(duì)象
DocumentBuilderFactory dbf = DocumnetBuilderFactory.instance();
2、創(chuàng)建一個(gè)DocumentBuilder的對(duì)象
DocumentBuilder db = dbf.newDocumentBuilder();
3、通過(guò)DocumentBuilder對(duì)象的parse方法加載xml文件到當(dāng)前項(xiàng)目
Document document = db.parse("*.xml");
其中2、3兩步需要try...catch異常。
3.2 使用Dom解析xml文件的屬性節(jié)點(diǎn)
在不知道節(jié)點(diǎn)屬性的個(gè)數(shù)和屬性名時(shí):
1、通過(guò)document.getElementByTagName("標(biāo)簽名")獲得所有標(biāo)簽名的節(jié)點(diǎn),得到一個(gè)NodeList集合
2、通過(guò)NodeList.getLength()獲得集合長(zhǎng)度,遍歷集合
3、Node node = NodeList.item(index)獲得里面的節(jié)點(diǎn)
4、通過(guò)NamedNodeMap attrs = node.getAttributes()獲取所有屬性集合
5、通過(guò)attrs.getLength()遍歷集合,Node attr = atrrs.item(index)
6、attr.getNodeName()獲得屬性名,attr.getNodeValue()獲取屬性值
前提已經(jīng)知道book節(jié)點(diǎn)有且只有1個(gè)id屬性,將book節(jié)點(diǎn)進(jìn)行強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換成element類型。
1、通過(guò)document.getElementByTagName("標(biāo)簽名")獲得所有標(biāo)簽名的節(jié)點(diǎn),得到一個(gè)NodeList集合
2、通過(guò)NodeList.getLength()獲得集合長(zhǎng)度,遍歷集合
3、element book=(element)bookList.item(i);//強(qiáng)制轉(zhuǎn)換為element類型
4、string attrValue = book.getAttribute("id");
ChildNodes.item(i).getFirstChild().getNOdeValue()和 ChildNodes.item(i).getTextContent()的區(qū)別 子節(jié)點(diǎn)中還包含其他子節(jié)點(diǎn)時(shí),后者可以把子節(jié)點(diǎn)的值都顯示出來(lái)。
getTextContent()獲取節(jié)點(diǎn)中的text內(nèi)容(即節(jié)點(diǎn)值).
getNodeType().............有text,element,attr三個(gè)
而Element如果要獲取值,必須讀取它的子節(jié)點(diǎn),<name>content</name>認(rèn)為content是namae的子節(jié)點(diǎn);
兩種方法:
getFirstChild().getNodeName();(獲取子節(jié)點(diǎn)再獲取值)
getTextContent();(獲取content方法)
4 常用節(jié)點(diǎn)類型
Element(NodeType:1;NodeName:元素名稱;NodeValue:null)
Attr(NodeType:2;NodeName:屬性名稱;NodeValue:屬性值)
Text(NodeType:3;NodeName:#text;NodeValue:節(jié)點(diǎn)內(nèi)容)
1.getFirstChild.getNodeValue():該節(jié)點(diǎn)下第一子節(jié)點(diǎn)的值
2.getTextContent() :該節(jié)點(diǎn)下包括后代節(jié)點(diǎn)里的文本內(nèi)容
5 小結(jié)
基礎(chǔ)方法:DOM(平臺(tái)無(wú)關(guān)的官方解析方式)、SAX(基于事件驅(qū)動(dòng)的解析方式)
擴(kuò)展方法:JDOM、DOM4J(在基礎(chǔ)的方法上擴(kuò)展出的,只有在java中能夠使用的解析方法)
DOM:一次性將整個(gè)xml文件加載到內(nèi)存中,形成DOM樹(shù)
優(yōu)點(diǎn):形成了樹(shù)結(jié)構(gòu),直觀好理解,代碼更容易編寫
解析過(guò)程中樹(shù)結(jié)構(gòu)保留在內(nèi)存中,方便修改
缺點(diǎn):當(dāng)xml文件較大時(shí),對(duì)內(nèi)存消耗比較大,容易影響解析性能并造成內(nèi)存溢出
SAX:逐條語(yǔ)句判斷解析
優(yōu)點(diǎn):采用事件驅(qū)動(dòng)模式,對(duì)內(nèi)存消耗比較小
適用于只需要處理xml中數(shù)據(jù)時(shí)
缺點(diǎn):不易編碼
很難同時(shí)訪問(wèn)同一個(gè)xml中的多處不同數(shù)據(jù)
JDOM:僅使用具體類而不使用接口
API大量使用了Collections類
DOM4J:JDOM的一種智能分支,它合并了許多超出基本XML文檔表示的功能
DOM4J使用接口和抽象基本類方法,是一個(gè)優(yōu)秀的Java XML API
具有性能優(yōu)異、靈活性好、功能強(qiáng)大和極端易使用的特點(diǎn)
是一個(gè)開(kāi)放源代碼的軟件
轉(zhuǎn)載于:https://www.cnblogs.com/helloIT/p/5191744.html
總結(jié)
- 上一篇: 1.嵌入式系统的简介
- 下一篇: 设计模式-设计原则(Design Pri