は、私は次のXMLがあるとしXSLT Change要素の順序
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns="http://someorg.org">
<name>
<use value="usual"/>
<given value="given"/>
<family value="family"/>
<suffix value="MSc"/>
</name>
</Test>
を私が試しました次のようにxsl:paply.templateを使用しますが、apply-templatesはすべての子ノードにテンプレートを適用するため、順序が変更されたノードも出力され、ノードにテンプレートを適用できないようにする方法がわかりませんその注文はすでに変更されています。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://someorg.org"
xmlns="http://someorg.org"
exclude-result-prefixes="f xsl">
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match = "f:name">
<xsl:apply-templates select = "f:given"/>
<xsl:apply-templates select = "f:family"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
感謝。ですから、私はすべての要素テンプレートに、必要な順番で適用する必要がありますか?最初の2つの要素だけを注文するように適用テンプレートを伝える方法はありませんか、残りは順序なしでそのまま残りますか?私の場合、この例ではいくつかのテンプレートしか持っていませんが、何十もの要素があり、最初の要素と2番目の要素の位置だけを交換してそのまま残りたいとしましょう。この場合でも、各要素ごとにapply-templatesを数十回書くのですか? – Enigma
あなたは、 (self :: f:use | self :: f:given)] "/>'これは、 'use'や' given'以外の子要素をすべて処理します。 XSLT 2.0では 'except'を使用することができます。 (f:use、f:given) "/>' –
ええ、私はこれらの行に何かを意味しました、ありがとう! – Enigma