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