用DOM解析XML ,用xpath快速查询XML节点

XPath是一种快速查询xml节点和属性的一种语言,Xpath和xml的关系就像是sql语句和数据库的关系。用sql语句可以从数据库中快速查询出东西同样的用xPath也可以快速的从xml中查询出东西。

下面的示例演示了怎么用jdk自带的rt.jar完成dom解析

代码如下:

test.xml的代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

<inventory>
    <book year="2012">
        <title>菜根谭</title>
        <author>洪应明</author>
        <dynasty>明朝</dynasty>
        <price>38</price>
    </book>
    <book year="2013">
        <title>曾国藩家书</title>
        <author>曾国藩</author>
        <dynasty>清朝</dynasty>
        <price>89</price>
    </book>
    <book year="2014">
        <title>高等代数</title>
        <author>丘维声</author>
        <dynasty>中华人民共和国</dynasty>
        <price>86</price>
    </book>
</inventory>

ParseXmlTest的代码如下:

package com.timo.xml;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.*;
import java.io.File;

/**
 * @author Abraham Qin
 * @since 2018/11/11
 */
public class ParseXmlTest {  //查询价格大于40的书的标题的内容
    private static final String XPath_EXPRESSION = "//book[price>40]/title/text()";
    public static void main(String[] args) throws Exception {

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        //开启验证:
        documentBuilderFactory.setValidating(true);
        documentBuilderFactory.setNamespaceAware(false);
        documentBuilderFactory.setIgnoringComments(true);
        documentBuilderFactory.setIgnoringElementContentWhitespace(true);
        documentBuilderFactory.setCoalescing(false);
        documentBuilderFactory.setExpandEntityReferences(true);
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        //设置异常处理:
        documentBuilder.setErrorHandler(new ErrorHandler() {
            @Override
            public void warning(SAXParseException exception) throws SAXException {
                System.out.println("warn:" + exception.getMessage());
            }

            @Override
            public void error(SAXParseException exception) throws SAXException {
                System.out.println("error:" + exception.getMessage());
            }

            @Override
            public void fatalError(SAXParseException exception) throws SAXException {
                System.out.println("fatalError:" + exception.getMessage());
            }
        });
        //将test.xml加载到一个Document的对象中:
        String filePath = "E:\\mybatis-indepth-research\\mybatis-3\\src\\main\\java\\com\\timo\\xml\\test.xml";
        Document document = documentBuilder.parse(new File(filePath));
        //查询author为洪应明的title:

        processParseXmlWithXpath(document,XPath_EXPRESSION );
    }

    private static void processParseXmlWithXpath(Document document, String xPathExpression) throws Exception {
        //创建XPathFactory:
        XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xPath = xPathFactory.newXPath();
        XPathExpression expression = xPath.compile(xPathExpression);
        Object result = expression.evaluate(document, XPathConstants.NODESET);
        if (result instanceof NodeList) {
            NodeList nodes = (NodeList) result;
            for (int i = 0; i < nodes.getLength(); i++) {
                System.out.println(String.format("%s=%s", nodes.item(i).getNodeName(), nodes.item(i).getNodeValue()));
            }
        }
    }
}

原文地址:https://www.cnblogs.com/1540340840qls/p/9942861.html

时间: 2024-08-25 13:16:16

用DOM解析XML ,用xpath快速查询XML节点的相关文章

XML编程总结(七)——使用XPath对象查询xml文档

(七)使用XPath对象查询xml文档 XPath,一种为查询 XML 文档而设计的查询语言.XPath 并不是 Java 语言,事实上 XPath 不是一种完整的编程语言.有很多东西用 XPath 表达不出来,甚至有些查询也无法表达.幸运的是,可以把 XPath 结合到 Java 程序中,这样就能发挥两者的优势了:Java 做 Java 所擅长的,XPath 做 XPath 所擅长的.Java 程序执行 XPath 查询所需要的应用程序编程接口(API)还因形形色色的 XPath 引擎而各不相

PowerShell技巧:使用XPath语法查询XML文件

[TechTarget中国原创] XML是存储结构化数据的一个很好的途径,但是想要让数据在其中发挥作用又会有些困难.每一种语言都有其特定方式来查询XML文件中的命名空间.元素及属性.PowerShell也不例外.PowerShell在查询XML文件时会略有不同,而该技巧主要依赖于Select-Xml命令和XPath语法上. XPath是定义XML文件组成的语言.XPath早在1999年就已经存在,一直被用于查询XML文件最标准的方法. XPath将XML文件定义为树.XML文件中的每个节点都节点

PHP中XPATH 实现xml及html文件快速解析(附xml做小型数据库实现六级单词快速查询实例)

一.XPATH简单入门 XPATH ,XQUERY 专门查询XML语言,查询速度快 使用方法: (1)创建DOM工具,并且加载 xml文件 $xml = new  DOMDocument('1.0','utf-8'); $xml -> load('./dict.xml'); 注:若是对html文件进行快速解析, 同样的道理 此处使用   loadhtmlfile (‘dict.html’); (2)创建xpath解析工具 $xpath = new DOMXPATH($xml); (3)编写xpa

Java XML DOM解析(xPath)

(一) XML概念 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据.是Internet环境中跨平台的.依赖于内容的技术,也是当今处理分布式结构信息的有效工具.早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输. (二)XML作用 1.

XML系列:(8)XML解析-Dom4j的xPath技术

1.xPath技术 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xPath作用:主要是用于快速获取所需的节点对象. 1.1.在dom4j中如何使用xPath技术 1)导入xPath支持jar包 .  jaxen-1.1-beta-6.jar(这个jar包在dom4j的压缩包中,位置:dom4j-1.6.1\lib\jaxen-1.1-beta-6.jar) 2)使用xpath方法 List selectNodes("xpath表达式");  

Java使用XPath查询XML中的元素

使用java中的xpath语法查询xml中元素 1.查询的xml文件为student.xml文件 <?xml version="1.0" encoding="UTF-8" ?><students> <student class="1201">  <name>李小离</name>  <sex>男</sex>  <age>25</age> &l

XML(七)-DOM解析

DOM解析 JAXP(Java API for XML Parsing) :用于XML解析的Java API. 本文通过一个实际的代码例子来说明如何用Java提供的DOM相关的类和接口解析XML: 首先,是XML文档:persons.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE persons [ <!ENTITY xx &quo

python中用xpath和xml.dom解析html

本次推荐的组合为xml.dom.minidom和xpath.其中xml.dom.minidom为python的标准库,无须安装.xpath为Google出品的开源项目py-dom-xpath. 安装py-dom-xpath: 从https://py-dom-xpath.googlecode.com/files/py-dom-xpath-0.1.tar.gz下载压缩包,解压. CD到py-dom-xpath-0.1目录 执行命令:C:\python27\python setup.py instal

Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath [引言] 目前在Java中用于解析XML的技术很多,主流的有DOM.SAX.JDOM.DOM4j,下文主要介绍这4种解析XML文档技术的使用.优缺点及性能测试. 一.[基础知识——扫盲] sax.dom是两种对xml文档进行解析的方法(