DOM方式解析XML


元素VS節點

節點包括:元素節點、屬性節點、文本節點。元素一定是節點,但是節點不一定是元素。

1 <?xml version="1.0" encoding="UTF-8"?>
2 <student>
3     <name id="001">張三</name>
4     <sex></sex>
5     <age>20</age>
6 </student>

文本節點:張三 男  20

元素節點:student  name  sex  age

屬性節點id="001"

DOM方式解析XML原理

基於DOM(Document Object Model,文檔對象模型)解析方式,是把整個XML文檔加載到內存,轉化成DOM樹,因此應用程序可以隨機的訪問DOM樹的任何數據;

優點:靈活性強,速度快;

缺點:消耗資源比較多;

DOM方式解析XML示例

1 <?xml version="1.0" encoding="UTF-8"?>
2 <student>
3     <name id="001">張三</name>
4     <sex></sex>
5     <age>20</age>
6 </student>

java文件:

 1 package com.java1234.xml;
 2 import javax.xml.parsers.DocumentBuilder;
 3 import javax.xml.parsers.DocumentBuilderFactory;
 4 import org.w3c.dom.Document;
 5 import org.w3c.dom.Element;
 6 import org.w3c.dom.NodeList;
 7 
 8 public class DOM01 {
 9     public static void main(String[] args) {
10         DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//利用DocumentBuilderFactory.newInstance();
11         try {
12             DocumentBuilder builder=factory.newDocumentBuilder();//利用Builder
13             Document doc=builder.parse("src/demo01.xml");//讀取文件
14             NodeList nodelist=doc.getElementsByTagName("student");//尋找節點
15             Element e=(Element)nodelist.item(0);
16             System.out.println("姓名:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());//解析節點
17             System.out.println("年齡:"+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());//解析年齡
18             System.out.println("性別:"+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue());//解析性別
19         } catch (Exception e) {
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23     }
24 }

這樣可以把信息順利的解析出來。

再來看一下復雜一些的例子:

多個信息:

students.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <students>
 3     <student>
 4         <name id="001">張三</name>
 5         <sex></sex>
 6         <age>20</age>
 7     </student>
 8     <student>
 9         <name xx="002">李四</name>
10         <sex></sex>
11         <age>18</age>
12     </student>
13 </students>

解析:

 1 package com.java1234.xml;
 2 
 3 import javax.xml.parsers.DocumentBuilder;
 4 import javax.xml.parsers.DocumentBuilderFactory;
 5 import javax.xml.parsers.ParserConfigurationException;
 6 import org.w3c.dom.Document;
 7 import org.w3c.dom.Element;
 8 import org.w3c.dom.NamedNodeMap;
 9 import org.w3c.dom.Node;
10 import org.w3c.dom.NodeList;
11 
12 import com.sun.tracing.dtrace.NameAttributes;
13 
14 public class Demo02 {
//識別屬性的方法!
15 public static void printNode(Node node){ 16 NamedNodeMap nodemap=node.getAttributes(); 17 for(int i=0;i<nodemap.getLength();i++){ 18 Node e=nodemap.item(i); 19 System.out.println(e.getNodeName()+" : "+e.getFirstChild().getNodeValue()); 20 } 21 22 } 23 public static void main(String[] args) { 24 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); 25 try { 26 DocumentBuilder builder= factory.newDocumentBuilder(); 27 Document doc=builder.parse("src/students.xml"); 28 NodeList nodelist=doc.getElementsByTagName("students"); 29 Element element=(Element)nodelist.item(0); 30 NodeList nodelists =element.getElementsByTagName("student"); 31 for(int i=0;i<nodelists.getLength();i++){ 32 Element e=(Element)nodelists.item(i); 33 System.out.println("姓名: "+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); 34 printNode(e.getElementsByTagName("name").item(0)); 35 System.out.println("年齡: "+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue()); 36 System.out.println("性別: "+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue()); 37 System.out.println("==============================================="); 38 } 39 } catch (Exception e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 44 } 45 }

OK了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM