java中DOM解析xml檔案
阿新 • • 發佈:2019-02-02
本文介紹瞭如何利用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{
//在此處賦值為空
}
執行這個程式,可以看到控制檯輸入結果為: