Есть ли "элегантный" способ проверить, что значение атрибута начинается с буквы? - PullRequest
11 голосов
/ 13 мая 2011

Мне нужно проверить, начинается ли значение attibute с буквы.Если этого не произойдет, я добавлю префикс «ID_», так что это будет допустимый тип идентификатора значения атрибута.В настоящее время у меня есть следующее (тестирование, что значение не начинается с числа - я знаю, что эти значения атрибута будут начинаться только с буквы или цифры), но я надеюсь, что есть более элегантный способ:

<xsl:if test="not(starts-with(@value, '1')) and not(starts-with(@value, '2')) and not(starts-with(@value, '3')) and not(starts-with(@value, '4')) and not(starts-with(@value, '5')) and not(starts-with(@value, '6')) and not(starts-with(@value, '7')) and not(starts-with(@value, '8')) and not(starts-with(@value, '9')) and not(starts-with(@value, '0')) ">

Я использую XSLT 1.0.Заранее спасибо.

Ответы [ 4 ]

9 голосов
/ 13 мая 2011

Используйте :

not(number(substring(@value,1,1)) = number(substring(@value,1,1)) )

Или используйте :

not(contains('0123456789', substring(@value,1,1)))

Наконец, это может быть самый короткий XPath 1.0выражение для проверки вашего состояния :

not(number(substring(@value, 1, 1)+1))
4 голосов
/ 13 мая 2011
<xsl:if test="string(number(substring(@value,1,1)))='NaN'">
  1. Используйте substring(), чтобы получить первый символ из значения @value
  2. Используйте функцию number() для оценки этого символа
    1. Если символ является числом, он вернет число
    2. Если символ не является числом, он вернется NaN
  3. Используйте функцию string(), чтобы оценить ее как строку и проверить, является ли она NaN или нет.
4 голосов
/ 13 мая 2011

Это немного короче, если не совсем элегантно или очевидно:

<xsl:if test="not(number(translate(substring(@value, 1, 1),'0','1')))">

Основная идея - проверить, является ли первый символ цифрой.Вызов translate() необходим, потому что оба значения 0 и NaN оцениваются как false, и нам нужно, чтобы 0 обрабатывалось как true внутри вызова not().

0 голосов
/ 13 мая 2011
<xsl:if test="string-length(number(substring(@value,1,1))) > 1">
  1. Используйте функцию substring(), чтобы поймать первый символ из значения @value
  2. Используйте функцию number() для оценки этого символа
    1. Если символ является числом, он вернет число
    2. Если символ не является числом, он вернется NaN
  3. Используйте string-length(), чтобы оценить, было ли оно больше 1 (не числа)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...