我有这个代码XML:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Edited by XMLSpy -->
<girone>
<classifica>
<squadra nome="Guerrieri" punti="3"/>
<squadra nome="Indios" punti="5"/>
<squadra nome="Leoni" punti="4"/>
<squadra nome="Primula Rossa" punti="1"/>
</classifica>
<risultati>
<partita id="g11">
<squadra nome="Indios" goal="2"/>
<squadra nome="Guerrieri" goal="0"/>
</partita>
<partita id="g12">
<squadra nome="Primula Rossa" goal="0"/>
<squadra nome="Leoni" goal="3"/>
</partita>
<partita id="g13">
<squadra nome="Guerrieri" goal="2"/>
<squadra nome="Leoni" goal="0"/>
</partita>
<partita id="g14">
<squadra nome="Indios" goal="1"/>
<squadra nome="Primula Rossa" goal="1"/>
</partita>
<partita id="g15">
<squadra nome="Indios" goal="1"/>
<squadra nome="Leoni" goal="1"/>
</partita>
</risultati>
</girone>
和这段代码XSLT(一个片段):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:for-each select="girone">
<xsl:for-each select="risultati/partita/squadra[@nome='Indios']">
<xsl:value-of select="sum(@goal)"/>
</xsl:for-each>
</xsl:for-each>
我必须总结球队“Indios”得分的所有目标。但不是得到结果:4,我得到:211。这不是总和,而是顺序的目标数量(纠正)。
另外,我应该总结球队“Indios”的失球目标。我曾这么想过:
<xsl:for-each select="girone">
<xsl:if test="risultati/partita/squadra[@nome='Indios']">
<xsl:value-of select="sum(risultati/partita/squadra[@nome!='Indios']/@goal)"/>
</xsl:if>
</xsl:for-each>
答案 0 :(得分:2)
此处 squadra 元素不需要 xsl:for-each 。要使sum()起作用,只需将你想要求的节点的xpath表达式放在sum()函数本身中,如下所示:
<xsl:for-each select="girone">
<xsl:value-of select="sum(risultati/partita/squadra[@nome='Indios']/@goal)"/>
</xsl:for-each>
这应该给你答案4。
编辑:如果你想在他们玩过的游戏中让'Indios'承认这些目标,那么表达方式如下:
<xsl:value-of select="sum(risultati/partita[squadra[@nome='Indios']]/squadra[@nome!='Indios']/@goal)"/>
这给出了结果2。