2017-11-13 5 views
1

Das Folgende ist meine Eingabe xml. Ich versuche Gruppe mit der Funktion current-group(), aber es ist nicht meine Anforderung, unten habe ich die Details zur Verfügung gestellt.current-group() außer einem Element in xslt

 <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> 

ich gruppieren mag es von Person/Code, so dass es wie diese die

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

sieht ich die unten Xslt bin mit, aber es wird wieder das Kopieren der Person, die ich don‘ Ich will, was ich hier vermisse, ich habe versucht mit current-group() außer und nicht [child :: Person] aber das hat auch nicht funktioniert.

<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> 

Antwort

3

Statt xsl:copy-of hier zu verwenden, verwenden xsl:apply-templates, dann können Sie eine Vorlage hinzufügen, um den Person Knoten

<xsl:template match="Person" /> 

Dies vorausgesetzt, dass Sie auch die Identität Vorlage zu ignorieren verwenden normalerweise alle anderen Knoten zu kopieren.

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

dieses XSLT Versuchen

<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> 
Verwandte Themen