1. 程式人生 > >XML —— DOM方式解析XML

XML —— DOM方式解析XML

1. DOM 方式解析 XML 原理

  • 基於 DOM(Document Object Model,文件物件模型)解析方式,是把整個 XML 文件載入到記憶體,轉化成 DOM 樹,因此應用程式可以隨機的訪問 DOM 樹的任何資料;
  • 優點:靈活性強,速度快;
  • 缺點:消耗資源比較多;

2. 元素 VS 節點 ( 節點包含元素 )

  • 節點包括元素節點、屬性節點、文字節點 
    <!-- students.xml -->
    <?
    xml version="1.0" encoding="UTF-8"?> <students>
    <student> <name id="001" xx="哈哈">張三</name> <sex></sex> <age>20</age> </student> <student> <name id="002">李四</name> <sex></sex> <age>21</age> </student>
    </students> // 元素節點:student、name、sex、age // 屬性節點:id、aa // 文字節點:張三、男、20

     

  • 元素一定是節點,但是節點不一定是元素 

3. DOM 方式解析 XML 示例

  • 示例
    package com.cocoomg.xml;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    
    import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DOM02 { public static void printNodeAttr(Node node){ NamedNodeMap namedNodeMap=node.getAttributes(); for(int i=0;i<namedNodeMap.getLength();i++){ //遍歷屬性節點 Node attrNode=namedNodeMap.item(i); System.out.println(attrNode.getNodeName()+":"+attrNode.getFirstChild().getNodeValue()); } } public static void main(String[] args) { DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//獲取工廠例項 try { DocumentBuilder builder=factory.newDocumentBuilder(); //通過Builder 解析 XML Document doc=builder.parse("src/students.xml"); //獲得文件 NodeList nodeList=doc.getElementsByTagName("students"); //通過標籤名字獲取節點 Element element=(Element)nodeList.item(0); NodeList studentsNodeList=element.getElementsByTagName("student"); //通過標籤名字獲取節點 for(int i=0;i<studentsNodeList.getLength();i++){ Element e=(Element)studentsNodeList.item(i); //Element 是 Node 的一個子類,功能比 Node 多 System.out.println("姓名:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); printNodeAttr(e.getElementsByTagName("name").item(0)); System.out.println("性別:"+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue()); System.out.println("年齡:"+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue()); System.out.println("================"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }