XML初識(一)--使用DOM解析XML資料
阿新 • • 發佈:2019-02-07
XML是一種資料儲存標準,可以在不同程式語言,不同程式和不同系統之間交換資料。
XML組織資料的形式是以倒排樹的形式來儲存的。即頂部是根節點,下面是子節點。
下面給出一個簡單的XML檔案,然後使用DOM獲取裡面的內容。
books.xml:
下面是Demo:
package com.imooc.domlearing;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w 3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomParseXml
{
public static void main(String[] args)
{
//1.獲取工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try
{
//2.得到DocumentBuilder
DocumentBuilder db = factory.newDocumentBuilder ();
//3.根據檔名匹配檔案,得到Document
Document document = db.parse("books.xml");
//4.根據標籤名字得到列表
NodeList list = document.getElementsByTagName("book");
System.out.println(list.getLength());
for(int i = 0;i<list.getLength();i++)
{
System.out .println("Now,we use "+(i+1));
//5.從list中取出兩本書節點
Node node = list.item(i);
//6.得到書的屬性(即我們定義了一個id)
NamedNodeMap nnm = node.getAttributes();
System.out.println("第"+i+"本書共有"+nnm.getLength()+"個屬性");
//7.下面是遍歷書屬性的程式碼
for(int j = 0;j<nnm.getLength();j++)
{
Node attr = nnm.item(j);
System.out.println("Attritube name : "+j+" " +attr.getNodeName());
System.out.println("Attritube value: "+j+" "+ attr.getNodeValue());
}
//8.得到書的子節點
NodeList childlist = node.getChildNodes();
for(int k = 0;k<childlist.getLength();k++)
{
Node par = childlist.item(k);
//9.這裡要注意,xml節點的排列方式,換行也是一個節點。
if(par.getNodeType()==Node.ELEMENT_NODE)
{
System.out.println(par.getNodeName()+":"+par.getFirstChild().getNodeValue());
}
}
System.out.println("第"+i+"本書遍歷完畢!!!");
}
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
下面是執行結果:
2
Now,we use 1
第0本書共有1個屬性
Attritube name : 0 id
Attritube value: 0 1
name:Linux Learning
year:2001
author:Linus
price:$49
第0本書遍歷完畢!!!
Now,we use 2
第1本書共有1個屬性
Attritube name : 0 id
Attritube value: 0 2
name:Git Learning
year:1998
author:Linus
price:$30
第1本書遍歷完畢!!!
注意:我們這裡改變books.xml檔案的字尾名也是可以的,同樣能夠識別出來。不過我們需要保證檔案內部是按照xml格式來組織的。