欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

施用xpath解析xml文件

更新时间: 2014-01-05 02:02:23 责任编辑: Author_N1

 

使用XPath解析XML文件

XPath是什么,简单的答案是用来手写XML解析的一种方法,复杂的答复就需要咨询一下Google,这里呢只记录一下使用方法,理论就不赘述了。

比如对于如下格式的XML文件,结构和内容并不复杂,直接使用DOM来手写解析过程倒也复杂,但是使用XPath的话,解析代码会更直接、更清晰一些。

<students>
    <student>
        <name length="1">a</name>
    </student>
    <student>
        <name length="2">aa</name>
    </student>
</students>
样例代码如下,为了减少篇幅,省略了异常处理的代码,实际项目代码中可不能偷懒。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class XPathTest {

    @SuppressWarnings("unchecked")
    public static void main(final String[] args) throws Exception {
        final File xmlFile = new File("a.xml");
        final XPath xpath = XPathFactory.newInstance().newXPath();// 构建XPath解析对象
        Reader reader = null;
        reader = new BufferedReader(new FileReader(xmlFile));// 构造文件IO输入对象,下面将提供文件IO对象给解析器
        final NodeList nodes = (NodeList) xpath.evaluate("students/student", new InputSource(reader),
                        XPathConstants.NODESET);// 使用XPath解析器,直接从XML信息中提取student节点的列表
        for (int i = 0; i < nodes.getLength(); ++i) {// 遍历节点列表
            final Node node = nodes.item(i);

            final Node nameNode = (Node) xpath.evaluate("name", node, XPathConstants.NODE);// 提取特定student节点下的name节点对应的XML对象,注意这里第二个参数是node,表达式为student的子节点name

            final String name = (String) xpath.evaluate("name", node, XPathConstants.STRING);// 提取特定student节点下name节点的值,注意第三个参数是字符串类型
            System.out.println(nameNode.getNodeName() + " = " + name);

            final NamedNodeMap attrs = nameNode.getAttributes();// 提取name节点的属性列表对象
            for (int j = 0; j < attrs.getLength(); ++j) {
                final Node attr = attrs.item(j);
                System.out.println(attr.getNodeName() + " = " + attr.getNodeValue());// 访问属性的值
            }
        }
        if (reader != null) {
            reader.close();
        }
    }
}

我想对于使用Java作为日常工作语言的程序员来说,手写代码来解析XML文件应当可以说是很基本功,所以上述代码看起来应当不费劲。

日前在参加公司内部组织考试的时候,因为当时处于项目尾期,留给我准备的时间不多。等拿到考试题的时候发现题目要求解析一个XML文件,并对XML文件的格式做校验,并且不允许使用第三方库;这时有点傻眼,毕竟有好几年没有手写过XML解析代码,一下子竟完全想不起来解析器工厂如何初始化了。好在工作这么多年,心理素质还不错,没有被题目吓倒。突然想起来项目组同事前几天讨论的XPath技术,就抱着试试的想法在Java的文档中搜索类的文档,恰好找到了XPath相关的几个类,以及注释中的样例,于是考试题目顺利拿下。

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:02:23
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/4882/
本文WWW.DOC100.NET DOC100.NET版权所有。