• 用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())); } } } }
  • 相关阅读:
    log4j配置只打印指定jar或包的DEBUG信息
    实现cookie跨域访问
    使用轻量级Spring @Scheduled注解执行定时任务
    Docker容器里时间与宿主机不同步
    Wildfly8 更改response header中的Server参数
    JBoss部署项目log4j配置会造成死锁问题,浏览器访问一直pending状态
    json-lib-2.4.jar Bug,json字符串中value为"[value]"结构时,解析为数组,不会解析成字符串
    【转载】分享下多年积累的对JAVA程序员成长之路的总结
    web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)
    rabbitmq+haproxy+keepalived实现高可用集群搭建
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/9942861.html
Copyright © 2020-2023  润新知