2017-11-13 11 views
1

아래는 필자의 입력 XML입니다. current-group() 함수를 사용하여 그룹을 시도하고 있지만 아래 요구 사항을 충족하지 못하고 있습니다. 아래에서 자세한 내용을 제공했습니다. 이있는 나는 아래의 XSLT를 사용하고이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:apply-templates을 사용, 여기에 xsl:copy-of를 사용

<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

은, 당신이 당신이 또한 일반적으로 다른 모든 노드를 복사 할 정체성 템플릿을 사용하는 가정 Person 노드

<xsl:template match="Person" /> 

을 무시하는 템플릿을 추가 할 수 있습니다.

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

이 XSLT를 시도

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