2011-10-07 7 views

답변

1

는이 작업을 수행하려면, 당신은 XSL 만들 수 있습니다 (예 : 현금과 크레딧 카드 등) 이외의 분할 요소를 일치 키를, 및 룩업 같은 가장 앞 분할 요소를 사용하여. 그런 다음

<xsl:key name="Acc" 
match="AccCode[AccCodeType != 'Split']" 
use="generate-id(preceding-sibling::AccCode 
    [AccCodeType = 'Split'] 
    [SuppDocNo/RefNo = current()/SuppDocNo/RefNo][1])" /> 

, 다음 XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:key name="Acc" match="AccCode[AccCodeType != 'Split']" use="generate-id(preceding-sibling::AccCode[AccCodeType = 'Split'][SuppDocNo/RefNo = current()/SuppDocNo/RefNo][1])"/> 

    <xsl:template match="/"> 
     <xsl:apply-templates select="//AccCode[AccCodeType = 'Split']"/> 
    </xsl:template> 

    <xsl:template match="AccCode[AccCodeType = 'Split']"> 
     <ITEM> 
     <LineItemNo> 
      <xsl:value-of select="../LineNo"/> 
     </LineItemNo> 
     <SplitPercentage> 
      <xsl:value-of select="PrimDocNo/RefNo"/> 
     </SplitPercentage> 
     <SplitNo> 
      <xsl:value-of select="SuppDocNo/RefNo"/> 
     </SplitNo> 
     <xsl:apply-templates select="key('Acc', generate-id())"/> 
     </ITEM> 
    </xsl:template> 

    <xsl:template match="AccCode[AccCodeType != 'Split']"> 
     <xsl:element name="{AccCodeType}"> 
     <xsl:value-of select="PrimDocNo/RefNo"/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
에 따라서 키

<xsl:apply-templates select="key('Acc', generate-id())" /> 

에서 그들을 찾는 모든 관련 요소를 얻을 수 있습니다 당신은 분할의 AccCode에 일치하는 경우

샘플 XML에이 값을 적용하면 다음이 출력됩니다.

<ITEM> 
    <LineItemNo>01</LineItemNo> 
    <SplitPercentage>100.00</SplitPercentage> 
    <SplitNo>01</SplitNo> 
    <Cash>100</Cash> 
    <CreditCard>200</CreditCard> 
</ITEM> 
<ITEM> 
    <LineItemNo>02</LineItemNo> 
    <SplitPercentage>50.00</SplitPercentage> 
    <SplitNo>02</SplitNo> 
    <Cash>300</Cash> 
    <CreditCard>400</CreditCard> 
</ITEM> 
<ITEM> 
    <LineItemNo>02</LineItemNo> 
    <SplitPercentage>50.00</SplitPercentage> 
    <SplitNo>01</SplitNo> 
    <Cash>500</Cash> 
    <CreditCard>600</CreditCard> 
</ITEM> 
+0

안녕하세요, 명확한 의견을 남겨 주셔서 감사합니다. – Sara