1

この一般的な構造を持つビットを含む xml ファイルがあります。

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

特定の CheckValue に関連付けられた内部ノードを選択したいと考えています。この例では、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 を呼び出す場合、別の構文を使用する必要がありますか? これを行うには、クエリ全体を 1 つのコマンドで記述する、もっと良い方法があるのではないかと思いますが、xquery を使用するのはこれが初めてで、まだすべてを理解していません。(それについての方法を教えてくれることも素晴らしいでしょう)

4

1 に答える 1

1

次の XPath を使用できるはずです。

/List/Outer[normalize-space(CheckValue)='yes']/Inner
于 2012-12-13T20:24:07.493 に答える