用JDK自带的包来解析XML文件(DOM+xpath)
2016-07-11 14:36
302 查看
DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
先来写一个xml文件(DTD文件请参阅XML DTD那篇博文):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "D:\workspace\XML\WebRoot\WEB-INF\book.dtd">
<book>
<bookname
name="XML详解" font="GB2312"></bookname>
<authors>
<author
name="张孝祥" sex="男" age="45"></author>
<author
name="王勇" sex="男" age="35"></author>
<author
name="王波" sex="男" age="30"></author>
</authors>
<price
value="¥55"></price>
<publishdate>
<value>2009-08-18</value>
</publishdate>
</book>
再来写解析xml文件的java文件:
package com.xml.jdk;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XPathForXml {
public
void parseXMLWithJdk(){
try
{
//读取book.xml到内存
DocumentBuilderFactory
dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder
dbd = dbf.newDocumentBuilder();
Document doc =
dbd.parse(new FileInputStream("D:\\workspace\\XML\\WebRoot\\WEB-INF\\book.xml"));
//通过XML获得book的authors的author子节点列表
XPathFactory
f = XPathFactory.newInstance();
XPath path = f.newXPath();
NodeList authors=
(NodeList) path.uate("book/authors/author", doc,XPathConstants.NODESET);
System.out.println(authors.getLength());
//遍历取到的元素
if(authors!=null){
for(int
i=0;i<authors.getLength();i++){
Node
author =
authors.item(i);
int
n = i + 1;
System.out.print(n+". 名字:"+author.getNodeName());
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
先来写一个xml文件(DTD文件请参阅XML DTD那篇博文):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "D:\workspace\XML\WebRoot\WEB-INF\book.dtd">
<book>
<bookname
name="XML详解" font="GB2312"></bookname>
<authors>
<author
name="张孝祥" sex="男" age="45"></author>
<author
name="王勇" sex="男" age="35"></author>
<author
name="王波" sex="男" age="30"></author>
</authors>
<price
value="¥55"></price>
<publishdate>
<value>2009-08-18</value>
</publishdate>
</book>
再来写解析xml文件的java文件:
package com.xml.jdk;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XPathForXml {
public
void parseXMLWithJdk(){
try
{
//读取book.xml到内存
DocumentBuilderFactory
dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder
dbd = dbf.newDocumentBuilder();
Document doc =
dbd.parse(new FileInputStream("D:\\workspace\\XML\\WebRoot\\WEB-INF\\book.xml"));
//通过XML获得book的authors的author子节点列表
XPathFactory
f = XPathFactory.newInstance();
XPath path = f.newXPath();
NodeList authors=
(NodeList) path.uate("book/authors/author", doc,XPathConstants.NODESET);
System.out.println(authors.getLength());
//遍历取到的元素
if(authors!=null){
for(int
i=0;i<authors.getLength();i++){
Node
author =
authors.item(i);
int
n = i + 1;
System.out.print(n+". 名字:"+author.getNodeName());
相关文章推荐
- [改善Java代码]减少HashMap中元素的数量
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- java二分法查找
- java自学篇之数组2
- [改善Java代码]使用shuffle打乱列表
- [改善Java代码]集合运算时使用更优雅的方式
- java自学篇之数组1
- Java基础——使用json所要用到的jar包下载
- [改善Java代码]集合中的元素必须做到compareTo和equals同步
- HeadFirstJava——8_接口与抽象类
- java接口的实现
- [改善Java代码]不推荐使用binarySearch对列表进行检索
- 深入剖析Java中的装箱和拆箱
- [改善Java代码]使用Comparator进行排序
- java多态的实现(二)
- 反射入门
- [改善Java代码]生成子列表后不要再操作原列表
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- MD5加密算法(JAVA)
- [改善Java代码]推荐使用subList处理局部列表