元素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了!