提问人:Gauthier Buttez 提问时间:10/15/2023 更新时间:10/16/2023 访问量:27
如何获取一个具有 xpath 的节点,该节点在 text 属性中只有数字?
How to get a node with Xpath which has only digits in the text attribute?
问:
我有这样的 DOM:
<a>abc</a>
<a>def</a>
<a>13456</a>
<a>gh564</a>
我想得到只包含数字的元素。
我可以通过获取所有元素并循环它们来检查 text() 是否为数字来做到这一点,但我更喜欢直接使用 Xpath 找到它。可能吗?
答:
0赞
Martin Honnen
10/15/2023
#1
使用 ,但这也适用于浮点内容,所以也许.或者旧的 XPath 1,测试:.//a[number() = number()]
<a>3.14</a>
//a[matches(., '^[0-9]+$')]
translate
//a[not(translate(., '0123456789', ''))]
0赞
Michael Kay
10/15/2023
#2
在 XPath 2.0 中,您可以将 matches() 函数与正则表达式一起使用。
1赞
Dimitre Novatchev
10/16/2023
#3
除了使用该函数的解决方案外,还有两种解决方案:matches()
//*[. castable as xs:integer]
//*[normalize-space() and not(translate(., '0123456789', ''))])
第二种解决方案可以在纯 XPath 1 - (仅)支持平台上使用。
基于 XSLT 的验证:
此转换:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:sequence select=
"(//*[. castable as xs:integer],
//*[normalize-space() and not(translate(., '0123456789', ''))])"/>
</xsl:template>
</xsl:stylesheet>
当应用于此 XML 文档时:
<t>
<a>abc</a>
<a>def</a>
<a>13456</a>
<a>gh564</a>
</t>
计算两个 XPath 表达式,并将这些计算的结果复制到输出中:
<a>13456</a>
<a>13456</a>
评论