xsl:copy(XSLT 1.0)の使い方についてはさまざまな回答がありましたが、文書全体をコピーするのにうまく動作する同じ<xsl:template match="@*|node()">
を使用しているようです。サブツリーをコピーしてテンプレートを適用する特定のノードに一致するように苦労しています。XSLTの使い方特定のXMLサブツリーをコピーするにはどうすればいいですか?
<MyXML>
<a>
<b>c</b>
</a>
<d>
<e>f</e>
</d>
<g x="y">
<foo bar="baz">
<item name="aname">quux</item>
<item name="bname">xyzzy</item>
</foo>
</g>
</MyXML>
そして、このスタイルシート:このXMLドキュメント与え例えば
、私が何をしたいのですがどのような
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="item[@name='bname']/text()">
<xsl:value-of select="translate(current(), 'y', 'Y')" />
</xsl:template>
</xsl:stylesheet>
は、その属性と子ノードと一緒にコピー唯一の要素foo
です同時に、その翻訳「y」 - >「Y」を適用する。私はそれが<xsl:template match="//foo">
または<xsl:template match="//foo/@*|//foo/node()">
に<xsl:template match="@*|node()">
を変えるのと同じくらい簡単かもしれないと思った
<foo bar="baz">
<item name="aname">quux</item>
<item name="bname">xYzzY</item>
</foo>
:私が望む結果がこれです。私はさまざまな順列を推測していますが、必要な結果を得ることはできません。
アイデンティティテンプレート(xsl:copyを持つテンプレート)は、ドキュメント全体をコピーするだけでなく、投げるノードをコピーします。具体的には、「ノードをスローする」方法は、そのノードを選択するxsl:apply-templatesを実行することです。したがって、あなたが欠けているのは、ルートテンプレート( 'match ="/"')レベルで ' 'です。 –