2016-07-21 9 views
0

XMLファイルのノード内の要素のグループを並べ替えるにはどうすればよいですか。特定のXML要素のグループをXSLTで並べ替えるにはどうすればいいですか?

は、ここで以下のように同じ階層の場所への出力を持っているか、私の入力

<Root> 
    <Level_1.1>...</Level_1.1> 
    <Level_1.2>...</Level_1.2> 
    <Level_1.3> 
     <Sub.1>...</Sub.1> 
     <Sub.2> 
      <S.1>1</S.1> 
      <S.3>Something</S.3> 
      <S.6>C</S.6> 
      <S.2/> 
      <S.4> 
       <AA.1>2</AA.1> 
      </S.4> 
      <S.5/> 
     </Sub.2> 
     <Sub.3>...</Sub.3> 
    </Level_1.3> 
    <Level_1.4>...</Level_1.4> 
</Root> 

です。

<Root> 
    <Level_1.1>...</Level_1.1> 
    <Level_1.2>...</Level_1.2> 
    <Level_1.3> 
     <Sub.2> 
      <S.1>1</S.1> 
      <S.2/> 
      <S.3>Something</S.3> 
      <S.4><AA.1>2</AA.1></S.4> 
      <S.5/> 
      <S.6>C</S.6> 
     </Sub.2> 
     <Sub.3>...</Sub.3> 
    </Level_1.3> 
    <Level_1.4>...</Level_1.4> 
</Root> 

これは私が他人の提案を試みたものですが、動作しません。

<xsl:template match="/Root/Level_1.3"> 
<xsl:copy> 
    <xsl:apply-templates> 
     <xsl:sort select="Sub.2" order="ascending"/> 
    </xsl:apply-templates> 
</xsl:copy> 

+0

これはかなり混乱しています。 'Sub.2'の子を** name **でソートしたいのですか? - そして、あなたの出力に 'Level_1.1'、' Level_1.2'、 'Level_1.4'がないのはなぜですか? –

+0

はいノード名でソートされた要素の子(Sub.2)を希望します。セクションだけを指定して出力をソートする必要があります。 – user1998820

+0

どうにかしてコピーとペーストで切り捨てられました – user1998820

答えて

0

このようにそれを試してみてください?

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="Sub.2"> 
    <xsl:copy> 
     <xsl:apply-templates> 
      <xsl:sort select="name()" data-type="text" order="ascending"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
関連する問題