如何使用XPath按TextContent过滤元素?按轴获得父母?

Mic*_*Mao 3 java xml xpath

在SO上发现了类似的问题,然而,这似乎并不是我想要实现的:

比如,这是一个示例XML文件:

<root>
    <item>
        <id isInStock="true">10001</id>
        <category>Loose Balloon</category>
    </item>
    <item>
        <id isInStock="true">10001</id>
        <category>Bouquet Balloon</category>
    </item>
    <item>
        <id isInStock="true">10001</id>
        <category>Loose Balloon</category>
    </item>
</root>
Run Code Online (Sandbox Code Playgroud)

如果我想从这个XML中获取item元素的"过滤"子集,我怎么能使用XPath表达式来直接解决这个问题呢?

XPathExpression expr = xpath.compile("/root/item/category/text()");
Run Code Online (Sandbox Code Playgroud)

我现在知道这将评估为类别中所有TextContent的集合,但是,这意味着我必须使用集合来存储值,然后迭代,然后再返回以获取其他相关信息,例如项目ID .

另一个问题是:我怎样才能正确引用父节点?

比方说,这个xpath表达式会让我得到所有id节点的集合,对吧?但我想要的是项目节点的集合:

XPathExpression expr = xpath.compile("/root/item/id[@isInStock='true']");
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用"父"轴来指代它,但我无法做到正确...

有没有更好的方法来做这种事情?现在学习w3cschools教程......

对不起,我是Java的XPath新手,非常感谢.

Dim*_*hev 6

如果我想从这个XML中获取item元素的"过滤"子集,我怎么能使用XPath表达式来直接解决这个问题呢?

示例XPath表达式:

/*/item[id/@isInStock='true']/category/text()

此XPath表达式选择所有<category>元素的所有<item>元素的所有文本节点子元素,isInStockid子元素的属性具有值,'true'并且(id元素)是XML文档的顶部元素的子元素.

另一个问题是:我怎样才能正确引用父节点?

用途:

parent::node()

或者干脆

..