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