我對XSLT很陌生,我試圖複製一個現有的XML文件,我已經擁有但重新排序的元素,但是當我嘗試重新排列孫子時,我被卡住了。XSLT - 副本孫子們重新排序
比方說,我有這樣的輸入:
<grandParent>
<parent>
<c>789</c>
<b>
<b2>123</b2>
<b1>456</b1>
</b>
<a>123</a>
</parent>
....
</grandParent>
我想要做的就是B = B1,B2中得到相同的XML文件,但改變標籤的順序爲A,B,C該訂單。 於是我開始用XSLT文件:
<xsl:template match="node()|@*"> <- This should copy everything as it is
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="grandParent/parent"> <- parent elements will copy in this order
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="a"/>
<xsl:copy-of select="b"/>
<xsl:copy-of select="c"/>
</xsl:copy>
</xsl:template>
但 「XSL:複製的選擇=」 b 「的」 副本,因爲他們指定的元素(B2,B1)。 我試着使用另一個xsl:template作爲「grandParent/parent/b」,但沒有任何幫助。
也許我沒有做正確的方式......任何提示?
謝謝!
的解決方案 - 感謝尼爾斯
您的解決方案工作得很好尼爾斯,我只是定製的多一點,以適應在我目前的情況,其中「B」是可選的,並且標籤的名字可能不相關。 最後的代碼是這樣的:
<xsl:template match="node()|@*"> <- This should copy everything as it is
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="grandParent/parent"> <- parent elements will copy in this order
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="a"/>
<xslt:if test="b">
<b>
<xsl:copy-of select="b1"/>
<xsl:copy-of select="b2"/>
</b>
</xslt:if>
<xsl:copy-of select="b"/>
<xsl:copy-of select="c"/>
</xsl:copy>
</xsl:template>
這兩個解決方案的作品。但是我認爲這個更加整潔。謝謝Ian – drewich
Ian,存在一種更通用的解決方案,適用於每個XML文檔 - 不依賴於任何名稱。 –