2017-11-07 8 views
2

XSLTのグループ化の概念が新しくなりました。私はXSLT 2.0を使用して以下のXMLをグループ化しようとしています。XSLTの各親ノードの下にある子ノードをグループ化する

<Root> 
    <Entry> 
     <Split> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
     </Split> 
     <Split> 
      <Data> 
       <Num>20</Num> 
       <Type>B</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>B</Type> 
      </Data> 
     </Split> 
     <Split> 
      <Data> 
       <Num>21</Num> 
       <Type>C</Type> 
      </Data> 
      <Data> 
       <Num>21</Num> 
       <Type>C</Type> 
      </Data> 
     </Split>   
    </Entry> 
</Root> 

以下は私の予想される出力です。 XSLT 2.0でのNum 『の値『は同じを持っている場合は、』

<Root> 
    <Entry> 
     <Split> 
      <New_Tag> 
       <Data> 
        <Num>20</Num> 
        <Type>A</Type> 
       </Data> 
       <Data> 
        <Num>20</Num> 
        <Type>A</Type> 
       </Data> 
       <Data> 
        <Num>20</Num> 
        <Type>A</Type> 
       </Data> 
      </New_Tag> 
      <New_Tag> 
       <Data> 
        <Num>20</Num> 
        <Type>B</Type> 
       </Data> 
       <Data> 
        <Num>20</Num> 
        <Type>B</Type> 
       </Data> 
      </New_Tag> 
     </Split> 
     <Split> 
      <New_Tag> 
       <Data> 
        <Num>21</Num> 
        <Type>A</Type> 
       </Data> 
       <Data> 
        <Num>21</Num> 
        <Type>A</Type> 
       </Data> 
      </New_Tag> 
     </Split> 
    </Entry> 
</Root> 

は、私が「Split'to』 New_Tag下の「データ」のタググループにしたいです。より多くのレポートエントリがあります。 これを手伝ってください。

これには蟻の道がありますか?

ありがとうございます。

答えて

0

あなたがグループSplitData/Numによって要素とはSplitNew_Tagに名前を変更することができます。

例...

XML入力

<Root> 
    <Entry> 
     <Split> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
     </Split> 
     <Split> 
      <Data> 
       <Num>20</Num> 
       <Type>B</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>B</Type> 
      </Data> 
     </Split> 
     <Split> 
      <Data> 
       <Num>21</Num> 
       <Type>C</Type> 
      </Data> 
      <Data> 
       <Num>21</Num> 
       <Type>C</Type> 
      </Data> 
     </Split>   
    </Entry> 
</Root> 

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="Entry"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"/> 
     <xsl:for-each-group select="Split" group-by="Data/Num"> 
     <xsl:copy> 
      <xsl:apply-templates select="current-group()"/> 
     </xsl:copy> 
     </xsl:for-each-group> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Split"> 
    <New_Tag> 
     <xsl:apply-templates select="@*|node()"/> 
    </New_Tag> 
    </xsl:template> 

</xsl:stylesheet> 

XML出力

<Root> 
    <Entry> 
     <Split> 
     <New_Tag> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>A</Type> 
      </Data> 
     </New_Tag> 
     <New_Tag> 
      <Data> 
       <Num>20</Num> 
       <Type>B</Type> 
      </Data> 
      <Data> 
       <Num>20</Num> 
       <Type>B</Type> 
      </Data> 
     </New_Tag> 
     </Split> 
     <Split> 
     <New_Tag> 
      <Data> 
       <Num>21</Num> 
       <Type>C</Type> 
      </Data> 
      <Data> 
       <Num>21</Num> 
       <Type>C</Type> 
      </Data> 
     </New_Tag> 
     </Split> 
    </Entry> 
</Root> 
+0

ありがとうございます。それは私のために働いた。 – Vinothkumar

関連する問題