有没有办法在xslt中检测数字字符串?

Kev*_*vin 4 html regex xml xslt xpath

我现在正在做xml xslt转换的html,非常直截了当.但我有一个未解决的小问题.

例如,在我的源代码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>
Run Code Online (Sandbox Code Playgroud)

如您所见,第一个子节点<span>的值为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>  
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这绝对不是一个好的解决方案,它将替换字符串中出现的所有数字,而不仅仅是第一个字符.所以我想知道是否有一种方法只删除第一个字符,如果它是一个数字,也许使用正则表达式?或者,我实际上走错了路,是否有更好的方法来考虑解决这个问题(例如,改变编码)?

欢迎任何想法!提前致谢!

Fai*_*Dev 6

只要用这个:

<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>
Run Code Online (Sandbox Code Playgroud)

这是一个XSLT 1.0解决方案.我认为正则表达式对此有些过分.

输出:

[xslt]                           y4145
Run Code Online (Sandbox Code Playgroud)

  • @Kevin no,但是你可以将结果存储到另一个变量中,或者在任何地方使用子条带($ test,2)作为值. (2认同)