查找与XSLT 1中的模式匹配的字符数

时间:2009-07-31 08:03:31

标签: regex xslt

如果源文档的字符串中只有一个星号,我需要声明测试通过。

因此,像

<xslt:if test="count(find('\*', @myAttribute)) = 1)>
    There is one asterisk in myAttribute
</xslt:if>

我需要XSLT 1的功能,但是XSLT 2的答案也会受到赞赏,但除非在XSLT 1中不可能,否则不会被接受。

2 个答案:

答案 0 :(得分:4)

在XPath 1.0中,我们可以通过使用translate删除所有星号并比较长度来实现:

string-length(@myAttribute) - string-length(translate(@myAttribute, '*', '')) = 1

在XPath 2.0中,我可能会这样做:

count(string-to-codepoints(@myAttribute)[. = string-to-codepoints('*')]) = 1

答案 1 :(得分:1)

另一个应该在XPath 1.0中起作用的解决方案:

contains(@myAttribute, '*') and not(contains(substring-after(@myAttribute, '*'), '*'))