2010-09-10 30 views
2

我有以下XML:XML/XSL:總和foreach循環與條件(特殊情況)

<root> 
<groups> 
    <group id="101"> 
    <number>10</number> 
    <children> 
    <leader id = "A" /> 
    <members> 
    <member id="1"> 
    <member id="2"> 
    <member id="3"> 
    </members> 
    </children> 
    </group> 
    <group id="102"> 
    <number>20</number> 
    <children> 
    <leader id = "A" /> 
    <members> 
    <member id="4"> 
    <member id="5"> 
    <member id="3"> 
    </members> 
    </children> 
    </group> 
    <group id="103"> 
    <number>30</number> 
    <children> 
    <leader id = "A" /> 
    <members> 
    <member id="1"> 
    <member id="4"> 
    <member id="3"> 
    </members> 
    </children> 
    </group> 
</groups> 

</root> 

我如何總結所有成員的人ID = 1使用XSL的財產?

感謝

+0

問得好(+1)。查看我的答案以獲得產生所需總和的單行XPath表達式。 :) – 2010-09-10 04:05:27

回答

5

使用

sum(/*/*/*/number[../children/members/member[@id=1]]) 

這種轉變:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:value-of select= 
    "sum(/*/*/*/number 
       [../children/members/member[@id=1]]) 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

當這個XML文檔施加(修正嚴重畸形提供的文本!):

<root> 
    <groups> 
     <group id="101"> 
      <number>10</number> 
      <children> 
       <leader id = "A" /> 
       <members> 
        <member id="1"/> 
        <member id="2"/> 
        <member id="3"/> 
       </members> 
      </children> 
     </group> 
     <group id="102"> 
      <number>20</number> 
      <children> 
       <leader id = "A" /> 
       <members> 
        <member id="4"/> 
        <member id="5"/> 
        <member id="3"/> 
       </members> 
      </children> 
     </group> 
     <group id="103"> 
      <number>30</number> 
      <children> 
       <leader id = "A" /> 
       <members> 
        <member id="1"/> 
        <member id="4"/> 
        <member id="3"/> 
       </members> 
      </children> 
     </group> 
    </groups> 
</root> 

產生想要的,正確的結果

40 
+1

+1爲rigth答案和花時間來糾正「嚴重畸形」的輸入! JA! – 2010-09-10 13:00:41