3

すべての属性を含む要素のコピーを出力し、内部の子にテンプレートを適用する必要があります。主な問題は、属性が不明であることです。

XML:

<elem attrA="a" attrB="b" ... attrN="n">
  <child><child>
  <child><child>
</elem>

すべての属性をループしようとしましたが、機能しません。

<xsl:template match="elem">
  <xsl:element name="name(.)">
    <xsl:for-each select="@*">
      <xsl:attribute name="name()">
        <xsl:value-of select="."/>
      </xsl:attribute>
    </xsl:for-each>
    <xsl:apply-templates />
  </xsl:element>
</xsl:template>

必要な出力:

<elem attrA="a" attrB="b" ...="" attrN="n">
  <processed-child></processed-child>
  <processed-child></processed-child>
</elem>

与えられた子テンプレート:

<xsl:template match="child">
  <processed-child><xsl:value-of select="."/></processed-child>
</xsl:template>

編集:

XSLT1.0

4

2 に答える 2

4

する

<xsl:template match="elem">
  <xsl:copy>
    <xsl:copy-of select="@*" />
    <xsl:apply-templates select="*" />
  </xsl:copy>
</xsl:template>

うまくいかない?

于 2013-06-04T11:26:34.237 に答える
2

Tomalakの回答に追加するだけで、タグの周りのテキストレンダリングを有効にするために、最終的なソリューションが少し強化されました. (元の投稿には記載されていませんでしたが、要件でした)

完全なソリューション:

<xsl:template match="elem">
  <xsl:copy>
    <xsl:copy-of select="@*" />
    <xsl:apply-templates select="*|text()" />
  </xsl:copy>
</xsl:template>

<xsl:template match="text()"><xsl:value-of select="."/></xsl:template>
于 2013-06-19T10:33:51.590 に答える