在 XPath 2.0 中,您可以使用正则表达式参数来使用 matches() 函数。
在 XPath 1.0 中使用:
string-length(translate(., $vallWantedChars, '')) = 0
仅当当前节点的字符串值不包含任何不需要的字符时,上述 XPath 表达式才为真。您需要将 $allunwantedChars 替换为包含任何所需字符的字符串文字或表达式。
例如,可以是:
concat($vAlpha, '0123456789', '/-().,+<>? ', $vApos)
这是在 XSLT 中的说明(解决方案仍然完全是 XPath 1.0,但在这种情况下 XPath 处理器的宿主语言是 XSLT 1.0):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="vAlpha" select=
"'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="vApos">'</xsl:variable>
<xsl:template match="/">
<xsl:variable name="vallWantedChars" select=
"concat($vAlpha, '0123456789', '/-().,+<>? ', $vApos)"/>
<xsl:value-of select=
"string-length(translate(., $vallWantedChars, '')) = 0"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下 XML 文档时:
<t>123^abc</t>
产生想要的正确结果:
false