使用XPath计数功能

时间:2018-03-29 21:54:18

标签: java xml oracle xpath count

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

2 个答案:

答案 0 :(得分:0)

您正在寻找的XPath表达式(而不是SQL表达式)是:

count(/film/directors/director)

您的示例XML文件的结果应为1 如果您想检查它是否为2,请使用

count(/film/directors/director) = 2

应该使用您的XML文件返回FALSE

答案 1 :(得分:0)

首先,您显然知道需要使用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是什么以及它是如何工作的