基于兄弟节点的条件xquery

时间:2012-12-13 20:17:59

标签: java xml xml-parsing

我有一个包含这种通用结构的xml文件:

<List>
    <Outer>
        <CheckValue>
            no
        </CheckValue>
        <Inner>
            2345
        </Inner>
    </Outer>
    <Outer>
        <CheckValue>
            yes
        </CheckValue>
        <Inner>
            1234
        </Inner>
    </Outer>
</List>

我想选择与某些CheckValues关联的Inner节点。在这个例子中,那将是找到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,我还没有想到这一切。 (指着我如何去做那件事也很棒)

1 个答案:

答案 0 :(得分:1)

您应该可以使用以下XPath:

/List/Outer[normalize-space(CheckValue)='yes']/Inner