通过XSLT删除整个XML文档中的变音符号

时间:2013-10-18 13:36:35

标签: xml xslt diacritics

我发现很多关于通过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>

1 个答案:

答案 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>