1

XSLT 関数 translate(source, sourceChars, outputChars) を介して特定の要素/属性を翻訳することについて多くのことを見つけたので、 translate("č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>
4

1 に答える 1

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>
于 2013-10-18T17:43:59.123 に答える