1. 程式人生 > >Java解析xml——JDOM解析

Java解析xml——JDOM解析

一、匯入jar包

JDOM不是Java提供的解析xml的方式,所以需要匯入額外的jar包,可以去官方網站下載。

二、JDOM解析例項

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
	<book id="1">
		<name>冰與火之歌</name>
		<author>喬治馬丁</author>
		<time>2014</time>
		<price>89</price>
	</book>
	<book id="2">
		<name>安徒生童話</name>
		<price>40</price>
		<time>2004</time>
		<language>English</language>
	</book>
</bookstore>
JDomDemo.java
public class JDomDemo {
	public static void main(String[] args) {
		//1、建立SAXBuilder物件
		SAXBuilder saxBuilder = new SAXBuilder();
		InputStream in;
		try {
			//2、建立輸入流,並將xml檔案載入到輸入流中
			in = new FileInputStream("xml/books.xml");
			//3、將輸入流載入到SAXBuilder物件中
			Document document = saxBuilder.build(in);

			//4、獲取根元素
			Element element = document.getRootElement();
			//5、獲取根元素的所有子元素
			List<Element> childList = element.getChildren();
			//6、遍歷每一個子元素
			for (Element child : childList) {
				System.out.println("===開始讀取第" + (childList.indexOf(child) + 1) + "本書的資訊===");
				//7-1、如果不知道屬性有哪些,使用Element.getAttributes獲取屬性,並遍歷屬性
				List<Attribute> attrList = child.getAttributes();
				for(Attribute attr : attrList) {
					System.out.println("屬性名:" + attr.getName() + "-->屬性值:" + attr.getValue());
				}
				//7-2、如果知道屬性有哪些,可以直接呼叫Element.getAttributeValue(String name)獲取對應的屬性值
				System.out.println("已知有id屬性,id屬性的值為" + child.getAttributeValue("id"));
				
				//8、獲取所有子節點,並呼叫Element.getName()方法獲取節點名,呼叫Element.getVlaue()方法獲取節點值
				List<Element> list = child.getChildren();
				for(Element ele : list) {
					System.out.println("子節點:" + ele.getName() + "--->子節點的值:" + ele.getValue());
				}
				System.out.println("===讀取第" + (childList.indexOf(child) + 1) + "本書的資訊結束===");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
執行結果:

===開始讀取第1本書的資訊===
屬性名:id-->屬性值:1
已知有id屬性,id屬性的值為1
子節點:name--->子節點的值:冰與火之歌
子節點:author--->子節點的值:喬治馬丁
子節點:time--->子節點的值:2014
子節點:price--->子節點的值:89
===讀取第1本書的資訊結束===
===開始讀取第2本書的資訊===
屬性名:id-->屬性值:2
已知有id屬性,id屬性的值為2
子節點:name--->子節點的值:安徒生童話
子節點:price--->子節點的值:40
子節點:time--->子節點的值:2004
子節點:language--->子節點的值:English
===讀取第2本書的資訊結束===