我有一个 xml 文件,其中包含一些具有这种一般结构的内容:
<List>
<Outer>
<CheckValue>
no
</CheckValue>
<Inner>
2345
</Inner>
</Outer>
<Outer>
<CheckValue>
yes
</CheckValue>
<Inner>
1234
</Inner>
</Outer>
</List>
我想选择与某些 CheckValues 关联的内部节点。在此示例中,将查找 CheckValues 为 yes 的 Outer 节点并在那里返回 Inner 节点。
我目前的尝试涉及使用 xquery 拉出所有外部节点,并在每个节点上使用另一个 xquery 检查 CheckValue,以便如果 CheckValue 合适,我可以检索内部节点:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("filePath.xml");
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("/List/Outer");
NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
Node curr = nodes.item(i);
expr = xpath.compile("/CheckValue/text()");
NodeList nodesInside = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
for (int j = 0; j < nodesInside.getLength(); j++) {
//Here I'd like to check the value of CheckValue and act appropriately, however execution never enters this for loop
}
System.out.println(curr.getNodeValue());
}
据我所知,我的内部 xquery 什么也没找到。在节点而不是文档上调用 xquery 时,我是否必须使用不同的语法?我怀疑有一个更好的方法可以做到这一点,在一个命令中编写整个查询,但这是我第一次使用 xquery,我还没有弄清楚这一切。(指点我如何去做也很好)