Найти количество символов, соответствующих шаблону в XSLT 1 - PullRequest
2 голосов
/ 31 июля 2009

Мне нужно сделать заявление, где тест пройден, если в строке исходного документа есть только одна звездочка.

Таким образом, что-то вроде

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

Мне нужна функциональность для XSLT 1, но ответы на XSLT 2 также будут оценены, но не получат одобрения, если это невозможно в XSLT 1.

Ответы [ 2 ]

4 голосов
/ 31 июля 2009

В 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 голос
/ 31 июля 2009

Другое решение, которое должно работать в XPath 1.0:

contains(@myAttribute, '*') and not(contains(substring-after(@myAttribute, '*'), '*')) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...