В 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