xslt删除标点符号

时间:2012-06-23 20:12:50

标签: xslt translate

有人能告诉我为什么以下代码行不是使用xslt 1.0删除段落元素的文本节点的句点和逗号的合法方法吗?这是我目前的模板:

<xsl:template match="tei:p">
    <p id="{@xml:id}" class="plaoulparagraph" style="margin-left: 3em;"><xsl:apply-templates select="./translate(current(), '.,', '')"/></p>
</xsl:template>

当我尝试这样做时,我的编辑器正在给我一个错误。

3 个答案:

答案 0 :(得分:2)

<xsl:apply-templates select="./translate(current(), '.,', '')"/>

在XSLT 1.0和2.0中,select xsl:apply-templates属性中的表达式必须评估为节点集

上述指令的select属性在XPath 1.0中在语法上无效,因为在XPath 1.0中,不允许将函数调用作为/运算符的RHS(感谢@MichaelKay)为了指出这一点)并且在XPath 2.0中它评估为一个字符串,而不是一个节点集 - 这就是错误的原因。

你想做类似的事情

<xsl:template match="tei:p//text()">
 <xsl:value-of select="translate(., '.,', '')"/>
</xsl:template>

并用

替换上面引用的说明
 <xsl:apply-templates/>

答案 1 :(得分:0)

使用此

<p class="plaoulparagraph" style="margin-left: 3em;"><xsl:value-of select="translate(current(), '.,', '')"/></p>

答案 2 :(得分:0)

如果您要处理数字的逗号,可以这样翻译:

<xsl:variable name="string_value">
   <xsl:value-of select="'123,456,789.01'"/>
</xsl:variable>

<Number>
    <xsl:value-of select="number(translate($string_value,',',''))"/>
<Number>