package com.imooc.domtest;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/*
* 应用DOM方式解析books.xml文件
*/
public class Domtest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();//新的 DocumentBuilder 实例
try {
//创建DocumentBuilder对象
DocumentBuilder db=dbf.newDocumentBuilder();
//通过DocumentBuilder对象的parse方法加载Books.xml文件到当前项目下
Document document= db.parse("books.xml");
//获取所有book 节点
NodeList booklist= document.getElementsByTagName("book");
System.out.println("一共有"+booklist.getLength()+"本书");
//遍历每个book节点
//for(int i=0;i<booklist.getLength();i++){
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>老人与海</name>
<author>海明威</author>
<year>2015</year>
<price>67</price>
</book>
<book id="2">
<name>看见</name>
<language>chinese</language>
<author>柴静</author>
<year>2014</year>
<price>87</price>
</book>
</bookstore>
错误:
[Fatal Error] books.xml:2:6: 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
org.xml.sax.SAXParseException; systemId: file:///E:/Users/kexin/workspace/DomTest/books.xml; lineNumber: 2; columnNumber: 6; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at com.imooc.domtest.Domtest.main(Domtest.java:26)
不过我发现如果我把 Document document= db.parse("books.xml");文件的路径改成Document document= db.parse("f:\\books.xml");运行就正确了。同时要注意xml文件保存时要以UTF-8编码保存。