我正在使用oracle sql数据库来执行带有xpath表达式的sql查询 - 我创建了一个XML文件,其中包含与电影相关的数据
答案 0 :(得分:0)
您正在寻找的XPath表达式(而不是SQL表达式)是:
count(/film/directors/director)
您的示例XML文件的结果应为1
如果您想检查它是否为2
,请使用
count(/film/directors/director) = 2
应该使用您的XML文件返回FALSE
。
答案 1 :(得分:0)
首先,您显然知道需要使用xPath来查询XML文件,但您似乎无法理解xPath是什么或应该如何使用它。
我的第一个建议是阅读xPath和xPath 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是什么以及它是如何工作的