2

これを行うために XSLT 2.0 を使用していますが、同様の質問にも出くわしましたが、回答が正しく機能していません。類似のもの

XML

<Users>
 <User id="1" name="TYE" Division="Admin"/> 
 <User id="2" name="ANN" Division="HR"/> 
 <User id="3" name="LAR" Division="Marketing"/> 
 <User id="4" name="JSN" Division="Admin"/> 
</Users>

このような出力が必要です。

<AllUsers>
 <Division value="HR">
  <User> 
   <id>2</id>
   <name>TYE</name>
  </User> 
  <User> 
   <id>5</id>
   <name>JSN</name>
  </User>
 </Division>
 <Division value="ADMIN">
  <User> 
   <id>3</id>
   <name>ANN</name>
  </User> 
 </Division>
 <Division value="Marketing">
  <User> 
   <id>4</id>
   <name>LAR</name>
  </User> 
 </Division>
</AllUsers>

部門ごとにグループ化する必要があります..ありがとう。

4

2 に答える 2

2

これは、よりプッシュスタイルの別のオプションです...

XML 入力

<Users>
 <User id="1" name="TYE" Division="Admin"/> 
 <User id="2" name="ANN" Division="HR"/> 
 <User id="3" name="LAR" Division="Marketing"/> 
 <User id="4" name="JSN" Division="Admin"/> 
</Users>

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="/*">
        <AllUsers>
            <xsl:for-each-group select="User" group-by="@Division">
                <Division value="{current-grouping-key()}">
                    <xsl:apply-templates select="current-group()"/>
                </Division>
            </xsl:for-each-group>
        </AllUsers>
    </xsl:template>

    <xsl:template match="User/@*">
        <xsl:element name="{name()}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="@Division" priority="1"/>

</xsl:stylesheet>

出力

<AllUsers>
   <Division value="Admin">
      <User>
         <id>1</id>
         <name>TYE</name>
      </User>
      <User>
         <id>4</id>
         <name>JSN</name>
      </User>
   </Division>
   <Division value="HR">
      <User>
         <id>2</id>
         <name>ANN</name>
      </User>
   </Division>
   <Division value="Marketing">
      <User>
         <id>3</id>
         <name>LAR</name>
      </User>
   </Division>
</AllUsers>
于 2013-11-04T03:43:19.107 に答える