2012-01-22 40 views
1

我需要關於XSLT問題的幫助。我沒有多少時間去尋找,但是我做了什麼,我找不到答案。我有xml有五個字段:Policy_Type,Policy_Date,狀態,Zip和金額付費。我需要找到一種方法來爲具有相同Policy_Type,Policy_Date,State和Zip的所有條目添加「金額付費」字段。有沒有人有關於在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