我们通常在 findnodes()
函数中编写搜索路径,如下所示
//parentNode[subNode/text() = 'CPUUSAGE']/subNode
我想匹配此处文本的一部分并找到所有节点是什么?
类似的东西
//parentNode[subNode/text() =~ '/CPUUSAGE'/]/subNode
显然这是无效的 xPath...
有什么想法可以实现这一目标吗?
我知道我可以首先找到节点,然后尝试匹配 textContent
。但是我们可以直接在 findnodes()
中一次性完成此操作吗?
最佳答案
XPath 1.0(由 libxml
实现)不包含任何对正则表达式的内置支持。在您给出的示例中,它使用相当简单的正则表达式,您可以使用 contains
function达到类似的结果:
//parentNode[subNode[contains(text(), 'CPUUSAGE')]]/subNode
(顺便说一句,这是一个奇怪的表达 - 你可能真的想要类似 //parentNode/subNode[contains(text(), 'CPUUSAGE')]
但我意识到这只是一个示例。)
还有其他一些string functions这对于创建其他简单查询可能很有用。
您可以创建自己的自定义 XPath 函数来根据正则表达式过滤节点,事实上 Perl LibXML 模块的文档包括 example of doing just that .
XPath 2.0 支持使用正则表达式 group of string functions 。除非您有 XPath 2.0 处理器,否则它不会太有用。
关于regex - LibXML中的xPath可以是正则表达式类型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22690997/