regex - LibXML中的xPath可以是正则表达式类型吗

标签 regex perl xpath libxml2

我们通常在 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/

相关文章:

javascript - String.prototype.match() 的两个修饰符

python - {m,n} 吗?正则表达式实际上最大限度地减少了重复,还是最大限度地减少了匹配的字符数?

testing - 如何在 SoapUI 中练习 Xpath 匹配断言?

Selenium:在没有输入标签的字段中输入文本 - 如何找到它是哪一个?

javascript - 正则表达式仅用一个 ">"替换所有前导 ">"

c# - 与任何特殊字符匹配的强密码正则表达式

Perl:通过 mojolicious 的异步 http 代理

perl - 如何在不访问 CPAN 的情况下使用 CPAN 模块?

regex - 在 perl 中使用数组元素进行模式匹配

python - selenium.common.exceptions.ElementClickInterceptedException : Message: element click intercepted: Element is not clickable with Selenium and Python