0

私はXMLツリーを持っています:

<text>
    <plain>abcd<c>efgh</c>ijklm</plain>
    <plain>nopq<c>rst</c>uvw<c>xyz</c></plain>
    <rp><first><c>asdasd</c>asf</first><second>asdasd</second></rp>
    <plain>aaaaa<c>bbbb</c>ccccc<c>xyz</c></plain>
</text>

次に、XSLT スタイルシート ($product_text には上記のツリーが含まれます) にコードがあります。

<xsl:template name="text_list">
<xsl:if test="$text_count &gt; 0">
    <xsl:apply-templates mode="text_item" select="$product_text/text">
        <xsl:sort select="@rating" order="descending" data-type="number" />
    </xsl:apply-templates>
</xsl:if>
</xsl:template>

<xsl:template mode="text_item" match="*">
    <div class="cmp-post">
        <xsl:copy-of select="./*" />
    </div>
</xsl:template>

このフラグメントは、すべてのツリーをそのままコピーします。ただし、すべての「c」ノードを次のように置き換え/変更する必要があります。

<c>efgh</c>
to
<cmp attr="efgh">efgh</c>

<c>rst</c>
to
<cmp attr="rst">rst</c>
etc

(編集済み) 私が期待する結果:

<div class="cmp-post">
    <plain>abcd<c attr="efgh">efgh</c>ijklm</plain>
    <plain>nopq<c attr="rst">rst</c>uvw<c attr="xyz">xyz</c></plain>
    <rp><first><c attr="asdasd">asdasd</c>asf</first><second>asdasd</second></rp>
    <plain>aaaaa<c attr="bbbb">bbbb</c>ccccc<c attr="xyz">xyz</c></plain>
</div>

text_item テンプレートをどのように変更すればよいですか?

4

1 に答える 1