1. 程式人生 > >java中DOM解析xml檔案

java中DOM解析xml檔案

本文介紹瞭如何利用DOM(即Document Object Model文件物件模型)解析xml檔案。

首先有一個xml檔案:

<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<User>
	<city country="中國">南京</city>
	<name>劉文文</name>
	<age>25</age>
	<sex>男</sex>
	<occupation>程式設計師</occupation>
</User>

利用DOM解析這個xml檔案:

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class ParsingXml {
	public static void main(String args[]) {
		String xml="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n" + 
				"<User>\r\n" + 
				"	<city country=\"中國\">南京</city>\r\n" + 
				"	<name>劉文文</name>\r\n" + 
				"	<age>25</age>\r\n" + 
				"	<sex>男</sex>\r\n" + 
				"	<occupation>>程式設計師</occupation>\r\n" + 
				"</User>\r\n" + 
				"";
		DOMParsingXml(xml);
	}
	public static void DOMParsingXml(String xml) {
		try {
			byte[] b=xml.getBytes();
			InputStream inp=new ByteArrayInputStream(b);
			DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
			DocumentBuilder builder=factory.newDocumentBuilder();
			Document doc=builder.parse(inp);
			NodeList nl=doc.getElementsByTagName("User");
			for (int i = 0; i < nl.getLength(); i++) {
				System.out.println("country:" + doc.getElementsByTagName("city").item(i).getAttributes().getNamedItem("country").getNodeValue());
				System.out.println("city:  " + doc.getElementsByTagName("city").item(i).getFirstChild().getNodeValue());
				System.out.println("name:  " + doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue());
				System.out.println("age:  " + doc.getElementsByTagName("age").item(i).getFirstChild().getNodeValue());
				System.out.println("sex:  " + doc.getElementsByTagName("sex").item(i).getFirstChild().getNodeValue());
				System.out.println("occupation:  " + doc.getElementsByTagName("occupation").item(i).getFirstChild().getNodeValue());
			}
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
	}
}

        可以看到DOM解析xml檔案是可以得到xml的屬性值的,但是這樣解析的xml有一個問題,就是當標籤裡的值為空的時候,解析xml檔案就會報錯為:java.lang.NullPointerException(空指標異常),那麼我們需要在解析值可能為空的標籤的時候加一次判斷,是否為標準的dom格式,如果不是,則賦值為空(null),如下所示:

if (標籤名 instanceof Element) {
     //則為標準形式,可以取到值
}else{
     //在此處賦值為空             
}

執行這個程式,可以看到控制檯輸入結果為: