2017-02-06 10 views
0

私はソートする必要があるXML文書があります。私はこれが働いている.. しかし、ソート後のルート要素は属性がありません 私はMS Forum postを試してみましたが動作しませんでした。私はルートノードの属性が必要です。おかげXSLT XMLソート - 不足しているルート属性

入力XMLその後、XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<TestProduct ProductName="SCADA" MaxResults="20" SamplesUsed="5"> 
    <TestCollection TestName="TestABC" Expected="Passed" Status="STABLE"> 
    <TestInfo TestResult="Passed" Version="8.0.1.19" Time="" Duration="" /> 
    <TestInfo TestResult="Passed" Version="8.0.1.18" Time="" Duration="" /> 
    </TestCollection> 
    <!-- Lots of TestCollection's --> 
    </TestProduct> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="TestProduct"> 
     <xsl:copy> 
      <xsl:for-each select="TestCollection"> 
       <xsl:sort select="@TestName" order="ascending"/> 
       <xsl:copy-of select="."/> 
      </xsl:for-each> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

答えて

1

あなたはTestProduct要素のコピー属性が欠落しています。 <xsl:copy>の最初の子として<xsl:copy-of select="@*"/>を追加します。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="TestProduct"> 
     <xsl:copy> 
      <xsl:copy-of select="@*"/> 
      <xsl:for-each select="TestCollection"> 
       <xsl:sort select="@TestName" order="ascending"/> 
       <xsl:copy-of select="."/> 
      </xsl:for-each> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

以下に、XSLTには、ノードをそのままコピーするIDトランスフォームテンプレートがあります。これは私が好む方法です:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="TestProduct"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:apply-templates select="TestCollection"> 
       <xsl:sort select="@TestName" order="ascending"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 

    <!-- Identity transform template --> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

速い応答に感謝します! "<?xml version =" 1.0 "encoding =" utf-8 ">>

+0

出力XMLをインデントすることを意味すると思います。 '' –

+0

パーフェクト、ありがとう –

関連する問題