zoukankan      html  css  js  c++  java
  • XML编程总结(七)——使用XPath对象查询xml文档

    (七)使用XPath对象查询xml文档

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

    在 Java 中计算 XPath 表达式时,第二个参数指定需要的返回类型。有五种可能,都在javax.xml.xpath.XPathConstants 类中命名了常量:

    • XPathConstants.NODESET
    • XPathConstants.BOOLEAN
    • XPathConstants.NUMBER
    • XPathConstants.STRING
    • XPathConstants.NODE

    测试代码:

     1 public class XPathTest {
     2     /**
     3      * 使用不带命名空间的XPath查询
     4      * @throws Exception
     5      */
     6     @Test
     7     public void testRetrieveOndNode() throws Exception{
     8         //获得xml文档的内存模型
     9         DocumentBuilder builder = DocumentBuilderFactory
    10         .newInstance().newDocumentBuilder();
    11         Document document = builder.parse(new File("src/main/resource/books.xml"));
    12         //创建XPathFactory对象
    13         XPathFactory xPathFactory = XPathFactory.newInstance();
    14         //获得XPath对象
    15         XPath xPath = xPathFactory.newXPath();
    16         //创建XPath表达式对象
    17         XPathExpression nodeExpr = xPath.compile("//book[1]");
    18         //执行XPath表达式,因为该表达式只能获得一个节点,所以用XPathConstants.NODE
    19         Element element = (Element) nodeExpr.evaluate(document, XPathConstants.NODE);
    20         NodeList nodes = element.getChildNodes();
    21         for(int i=0;i<nodes.getLength();i++){
    22             Node node = nodes.item(i);
    23             //获得节点类型
    24             short nodeType = node.getNodeType();
    25             if(nodeType==Node.ELEMENT_NODE){
    26                 //获得节点文本,getNodeValue()无法获得节点的文本
    27                 String text=node.getTextContent();
    28                 System.out.println(node.getNodeName()+"--"+text);
    29             }
    30         }
    31     }
    32 }
  • 相关阅读:
    codeforces 589G G. Hiring(树状数组+二分)
    树状数组的小总结
    virtualenv
    Redis备份与恢复
    Linux 网站相关
    MySQL文章参考
    动态执行表不可访问,本会话的自动统计被禁止 。 在执行菜单里你可以禁止统计,或在v$session,v$sesstat 和 v$statname 表里获得select权限
    app已损坏,打不开。你应该将它移到废纸篓
    macos系统用virtualbox安装Linux系统无法设
    Hadoop 分布式部署HDFS-hadoop用户部署
  • 原文地址:https://www.cnblogs.com/techlogy/p/5965125.html
Copyright © 2011-2022 走看看