您的位置:首页 > 编程语言 > Java开发

用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());                       
             
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: