【问题标题】:Using XPath count function使用 XPath 计数功能
【发布时间】:2018-09-08 23:20:25
【问题描述】:

我正在使用 oracle sql 数据库执行带有 xpath 表达式的 sql 查询——我创建了一个 XML 文件,其中包含与电影相关的数据

【问题讨论】:

  • SQL 与 XPath 有什么关系?
  • 这里到底发生了什么……
  • @shmosel - SQL 支持 XML 数据类型和 XML 列中的 XPATH
  • 这是一个编程挑战,我被告知使用 oracle sql 数据库并使用 xpath 表达式执行 sql 查询
  • 也许您应该在问题中提到这一点。无论哪种方式,你所拥有的都不像我看到的 in the docs

标签: java xml oracle xpath count


【解决方案1】:

您要查找的 XPath 表达式(不是 SQL 表达式)是:

count(/film/directors/director)

在您的示例 XML 文件中,哪个结果应该是 1
如果要检查是否为2,请使用

count(/film/directors/director) = 2

它应该与您的 XML 文件一起返回 FALSE

【讨论】:

    【解决方案2】:

    首先,您显然知道需要使用 xPath 来查询 XML 文件,但您似乎没有理解 xPath 是什么或应该如何使用它。

    我的第一个建议是阅读 xPathxPath in Java,因为它与 SQL 无关。

    然后我快速搜索了“java xpath count”并遇到了许多优秀的示例,但基于XPath count() function,我开始使用...测试您的文档......

    try {
        DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
        DocumentBuilder b = f.newDocumentBuilder();
        // This is your document in a file
        Document d = b.parse(new File("Test.xml"));
        d.getDocumentElement().normalize();
    
        String expression = "//film[count(directors)=1]";
        XPath xPath = XPathFactory.newInstance().newXPath();
        Object result = xPath.compile(expression).evaluate(d, XPathConstants.NODESET);
    
        NodeList nodes = (NodeList) result;
        System.out.println(nodes.getLength());
        for (int i = 0; i < nodes.getLength(); i++) {
    
            Node node = nodes.item(i);
            System.out.println("Found " + node.getTextContent());
        }
    } catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException | DOMException exp) {
        exp.printStackTrace();
    }
    

    这基本上列出了film 节点(找到了一个匹配项)......但是,你为什么会产生一个结果?!查看查询//film[count(directors)=1],它列出了所有film 与一个导演匹配,因为我想测试查询。将其更改为//film[count(directors)=2],它将根据您的示例返回零匹配的结果。

    我强烈建议您暂停片刻,更熟悉 xPath 是什么以及它是如何工作的,然后再继续

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2018-06-10
      • 1970-01-01
      • 2019-08-04
      • 2013-07-04
      相关资源
      最近更新 更多