2017-11-13 9 views
1

以下は私の入力XMLです。私はcurrent-group()関数を使ってグループを試していますが、私の要求を満たしていません。xsltの1つの要素を除いてcurrent-group()

それは私が下記のXSLTを使用していますが、それは、再び「私はドン人をコピーしているため、この

<Person Code="074"> 
     <UsrTimeCardEntry> 
       <Code>1</Code> 
       <Name>TC1</Name> 
     </UsrTimeCardEntry> 
     <UsrTimeCardEntry> 
       <Code>2</Code> 
       <Name>TC2</Name> 
     </UsrTimeCardEntry> 
</Person> 

のように見えるように、私は人/コードによりグループにそれをしたい

 <UsrTimeCardEntry> 
      <Code>1<Code> 
      <Name>TC1</Name> 
      <Person> 
       <Code>074</Code> 
      </Person> 
     </UsrTimeCardEntry> 
     <UsrTimeCardEntry> 
      <Code>2<Code> 
      <Name>TC2</Name> 
      <Person> 
       <Code>074</Code> 
      </Person> 
     </UsrTimeCardEntry> 

私がここで行方不明になっているものは、current-group()を使ってみましたが、[child :: Person]を除いてみましたが、それもうまくいきませんでした。

<xsl:template match="businessobjects"> 
    <xsl:for-each-group select="UsrTimeCardEntry" group-by="Person/Code"> 
     <Person Code="{current-grouping-key()}"> 
      <xsl:copy-of select="current-group()"></xsl:copy-of> 
     </Person> 
    </xsl:for-each-group> 
</xsl:template> 

答えて

3

の代わりに、ここでxsl:copy-ofを使用して、xsl:apply-templatesを使用し、その後、あなたはPersonノードを無視する

<xsl:template match="Person" /> 

をテンプレートを追加することができますこれはまた、通常、他のすべてのノードをコピーするにはアイデンティティーテンプレートを使用していることを前提とします。

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:strip-space elements="*" /> 

    <xsl:template match="businessobjects"> 
     <xsl:for-each-group select="UsrTimeCardEntry" group-by="Person/Code"> 
      <Person Code="{current-grouping-key()}"> 
       <xsl:apply-templates select="current-group()" /> 
      </Person> 
     </xsl:for-each-group> 
    </xsl:template> 

    <xsl:template match="Person" /> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
このXSLTをお試しください
関連する問題