因此,下面的XSL会将任何连字符转换为XML中Foo
的空格。
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Foo">
<xsl:copy>
<xsl:value-of select="translate( ., '-', ' ')" />
</xsl:copy>
</xsl:template>
上述XSLT效果很好但仅适用于Foo
。有没有办法让翻译适用于所有元素,而无需为每个元素单独设置(同时保持原始XML结构完整)?
答案 0 :(得分:1)
在进行字符串处理时,正确的方法是使用<xsl:template match="text()"><xsl:value-of select="translate(., '-', ' ')"/></xsl:template>
来处理所有文本节点。
虽然match="*"
允许您匹配所有元素,但您当前的模板将复制根元素并转换并输出其字符串值,但不会进一步处理任何子元素。因此,使用match="text()"
更合适,当然没有xsl:copy
。
当然,对于整个工作方法,您需要使用身份转换模板
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>