2012-01-22 3 views
1

XSLT 문제에 대한 도움이 필요합니다. 나는 검색 할 시간이별로 없지만 내가 한 것에 대해서는 대답을 찾을 수 없었다. Policy_Type, Policy_Date, State, Zip 및 amount amount와 같은 다섯 개의 필드가있는 XML이 있습니다. 동일한 Policy_Type, Policy_Date, State 및 Zip을 갖는 모든 항목에 대해 Amount Paid 필드를 함께 추가하는 방법을 찾아야합니다. XSL에서이 문제를 해결하기위한 모범 사례에 대한 제안이있는 사람이 있습니까?일치하는 필드를 XSLT에 추가했습니다.

또한이 필드는 Interbase 데이터베이스에서 가져옵니다. SQL 문을 통해이를 수행하는 방법이 있다면 환영받을 것입니다. 나는 Interbase에 익숙하지가 않다.

답변

1

이 변환 :

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:key name="kTrans" match="transaction" 
    use="concat(Policy_Type, 
      '+', 
       Policy_Date, 
      '+', 
       State, 
      '+', 
       Zip)"/> 

<xsl:template match= 
    "transaction 
    [generate-id() 
    = 
    generate-id(key('kTrans', 
         concat(Policy_Type, 
          '+', 
           Policy_Date, 
          '+', 
           State, 
          '+', 
           Zip) 
        )[1] 
       ) 
    ] 
    "> 
    <transaction> 
    <xsl:copy-of select="*[not(self::AmountPaid)]"/> 

    <TotalAmountPaid> 
    <xsl:value-of select= 
    "sum(key('kTrans', 
       concat(Policy_Type, 
        '+', 
        Policy_Date, 
        '+', 
        State, 
        '+', 
        Zip) 
        ) 
        /AmountPaid 
     ) 
    "/> 
    </TotalAmountPaid> 
    </transaction> 
</xsl:template> 
<xsl:template match="text()"/> 
</xsl:stylesheet> 

(어떤 소스 XML 문서가 제공되지로!) 다음 XML 문서에 도포했을 때

<transactions> 
<transaction> 
    <Policy_Type>A</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>WA</State> 
    <Zip>98004</Zip> 
    <AmountPaid>189.32</AmountPaid> 
</transaction> 
<transaction> 
    <Policy_Type>B</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>NY</State> 
    <Zip>111111</Zip> 
    <AmountPaid>111.11</AmountPaid> 
</transaction> 
<transaction> 
    <Policy_Type>A</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>WA</State> 
    <Zip>98004</Zip> 
    <AmountPaid>223.05</AmountPaid> 
</transaction> 
<transaction> 
    <Policy_Type>B</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>NY</State> 
    <Zip>111111</Zip> 
    <AmountPaid>111.11</AmountPaid> 
</transaction> 
<transaction> 
    <Policy_Type>C</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>NY</State> 
    <Zip>111111</Zip> 
    <AmountPaid>111.11</AmountPaid> 
</transaction> 
</transactions> 

가 원하는 정확한 결과를 생성 :

<transaction> 
    <Policy_Type>A</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>WA</State> 
    <Zip>98004</Zip> 
    <TotalAmountPaid>412.37</TotalAmountPaid> 
</transaction> 
<transaction> 
    <Policy_Type>B</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>NY</State> 
    <Zip>111111</Zip> 
    <TotalAmountPaid>222.22</TotalAmountPaid> 
</transaction> 
<transaction> 
    <Policy_Type>C</Policy_Type> 
    <Policy_Date>2012-01-11</Policy_Date> 
    <State>NY</State> 
    <Zip>111111</Zip> 
    <TotalAmountPaid>111.11</TotalAmountPaid> 
</transaction> 

설명 : Muenchian grouping.

관련 문제