Есть ли способ обнаружить числовую строку в xslt? - PullRequest
4 голосов
/ 04 ноября 2011

Сейчас я делаю преобразование html в xml xslt, довольно просто.Но у меня есть одна небольшая проблема, которая остается нерешенной.

Например, в моем html-источнике узел выглядит так:

<p class="Arrow"><span class="char-style-override-12">4</span><span class="char-style-override-13"> </span>Sore, rash, growth, discharge, or swelling.</p>

Как видите, первый дочерний узел имеет значение 4, действительно ли оно отображается как точка стрелки в браузере (возможно, какая-то проблема с кодировкой, в моем редакторе XML это рассматривается как числовое значение).

Итак, мой вопрос, я написалшаблон, соответствующий тегу, затем передайте текстовое содержимое другого шаблона:

 <xsl:template match="text()">
    <xsl:variable name="noNum">
        <xsl:value-of select="normalize-space(translate,'4',''))"/>
    </xsl:variable>
 <xsl:copy-of select="$noNum"/>    
  </xsl:template>  

Как видите, это определенно не хорошее решение, оно заменит все числа, отображаемые вСтрока, а не только первый символ.Поэтому мне интересно, есть ли способ удалить только первый символ, ЕСЛИ это число, может быть, с помощью регулярного выражения?Или, на самом деле, я иду по неправильному пути, должен ли быть лучший способ решения этой проблемы (например, изменение кодировки)?

Любая идея приветствуется!Заранее спасибо!

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

Просто используйте это:

<xsl:variable name="test">4y4145</xsl:variable>
<xsl:if test= "not(string(number(substring($test,1,1)))='NaN')">
    <xsl:message terminate="no">
              <xsl:value-of select="substring($test,2)"/>
    </xsl:message>
</xsl:if>

Это решение XSLT 1.0.Я думаю, что регулярные выражения - это перебор для этого.

Вывод:

[xslt]                           y4145
3 голосов
/ 05 ноября 2011

Используйте это одно выражение XPath :

concat(translate(substring(.,1,1), '0123456789', ''),
       substring(.,2)
       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...