1.DOM解析XML
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(new FileInputStream(file));
得到的Document对象就是XML文档对象的实体
NodeList nodeList = document.getElementsByTagName("book");
得到标签名称是book的节点集合
Node和Element的区别:
node和Element是两个领域的概念。
NODE是相对TREE这种数据结构而言的。TREE就是由NODE组成。这个部分你可以参考离散数学的树图。
ELEMENT则是XML里的概念,<xxx>就是元素,是XML中的数据的组成部分之一。
元素(Element)和结点(Node)的区别,元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,
例如<div>...</div>。但是一个结点不一定是一个元素,而一个元素一定是一个结点。
举例来说:
<book class="Hello World 2">
<name scope="test">Spring in Action</name>
<price scope="dev">39.0</price>
</book>
这整个可以理解为一个Element ,但是如果使用geiChildNode 发现有5个Node,分别是<name></name> , <price></price>,Spring in Action ,39.0 </book>
代码实例如下:
NodeList nodeList = document.getElementsByTagName("book");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element element = (Element) node;
System.err.println(element.getAttribute("class"));
NodeList nodeList2 = element.getElementsByTagName("price");
System.err.println(((Element) (nodeList2.item(0))).getAttribute("scope"));
}
//for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
System.err.println(node.getChildNodes().getLength());
}
打印的结果是5
NodeList child = node.getChildNodes();
for (int j = 0; j < child.getLength(); j++) {
System.err.println(child.item(j).getNodeType() + "node Type");
}
打印结果依次为:
3node Type
1node Type
3node Type
1node Type
3node Type
可以验证我们想要表达的
2.SAX解析XML文件
重要的一点:EntityResolver 这个究竟是为了干什么 : http://www.cnblogs.com/mjorcen/p/3642855.html 这个文章有详细的解释
继承DefaultHandler 这个类 主要重载以下方法就可以实现一些类似的操作:
startDocument :XML解析开始
endDocument:XML解析结束
startElement:解析元素开始
endElement:解析元素结束
characters:获取节点中间文字内容