XML / XSL: сумма в цикле foreach с условным условием (особый случай) - PullRequest
3 голосов
/ 10 сентября 2010

У меня есть следующий 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>

Как я могу суммировать собственность всех членов, id = 1, используя XSL?

Спасибо

1 Ответ

6 голосов
/ 10 сентября 2010

Использовать :

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...