我发现很多关于通过XSLT函数translate(source,sourceChars,outputChars)翻译特定元素/属性的内容,以便翻译(“čašaž”,“čšž”,“csz”)= casaz
我需要XSLT模板,它可以转换每个节点和每个属性。 我不知道源XML的结构,因此它必须是通用的,不依赖于属性或元素名称和值。
我正在寻找像这样的伪变换:
<xsl:template match="@*">
<xsl:copy>
<xsl:apply-templates select="translate( . , "čžš","czs")"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="translate( . , "čžš","czs")"/>
</xsl:copy>
</xsl:template>
答案 0 :(得分:2)
您可以为包含要标准化的数据的元素编写模板,下面我为属性值,文本节点,注释节点和处理指令数据执行此操作。
<xsl:param name="in" select="'čžš'"/>
<xsl:param name="out" select="'czs'"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}" namespace="{namespace-uri()}">
<xsl:value-of select="translate(., $in, $out)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="translate(., $in, $out)"/>
</xsl:template>
<xsl:template match="comment()">
<xsl:comment>
<xsl:value-of select="translate(., $in, $out)"/>
</xsl:comment>
</xsl:template>
<xsl:template match="processing-instruction()">
<xsl:processing-instruction name="{name()}">
<xsl:value-of select="translate(., $in, $out)"/>
</xsl:processing-instruction>
</xsl:template>