这个问题是上一个线程的后续问题:XSLT:根据其他节点的值之和进行排序 https://stackoverflow.com/questions/13502321/xslt-sorting-based-on-sum-of-values-from-other-nodes
我现在可以使用键从其他节点汇总数据。
我似乎无法得到的是现在应用条件来选择使用这些键时所需要的数据所需的语法或方法。
这是我正在使用的简化 xml(对上一个进行了修改以突出显示问题):
<Horses>
<Horse>
<ID>1</ID>
<Name>hrsA</Name>
<SireID>101</SireID>
<Age>3</Age>
<Pace>
<Stakes>20</Stakes>
<Wins>0</Wins>
</Pace>
</Horse>
<Horse>
<ID>2</ID>
<Name>hrsB</Name>
<SireID>101</SireID>
<Age>6</Age>
<Pace>
<Stakes>1600</Stakes>
<Wins>9</Wins>
</Pace>
</Horse>
<Horse>
<ID>3</ID>
<Name>hrsC</Name>
<SireID>101</SireID>
<Age>3</Age>
<Trot>
<Stakes>200</Stakes>
<Wins>2</Wins>
</Trot>
</Horse>
<Horse>
<ID>4</ID>
<Name>hrsD</Name>
<SireID>101</SireID>
<Age>4</Age>
<Pace>
<Stakes>50</Stakes>
<Wins>0</Wins>
</Pace>
<Trot>
<Stakes>100</Stakes>
<Wins>1</Wins>
</Trot>
</Horse>
<Horse>
<ID>5</ID>
<Name>hrsE</Name>
<SireID>101</SireID>
<Age>3</Age>
<Pace>
<Stakes>100</Stakes>
<Wins>1</Wins>
</Pace>
<Trot>
<Stakes>300</Stakes>
<Wins>1</Wins>
</Trot>
</Horse>
</Horses>
<Sires>
<Sire>
<ID>101</ID>
<Name>srA</Name>
<LiveFoalsALL>117</LiveFoalsALL>
</Sire>
</Sires>
在一种情况下,我需要获得属于某一年龄的父亲的后代(马)。
由于没有指定年龄,我使用一个密钥对赢得的赌注进行排序,如下所示(感谢 Dimitre):
<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="kOffspring" match="Horse" use="SireID"/>
<xsl:template match="/*">
<xsl:apply-templates select="Sires/Sire">
<xsl:sort select="sum(key('kOffspring', ID)/*/Stakes)"
data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Sire">
<!-- get the data I want -->
</xsl:template>
</xsl:stylesheet>
现在,在“获取我想要的数据”中,我尝试只获取 3 岁的马(年龄=3)
例如,为了只获得 srA 的 3 岁获胜后代(答案 = 2),我需要这样的东西,我在想:
<xsl:value-of select="count(key('kOffspring', ID)[Age=3]/*/Wins)"/>
但这不起作用...或者我是否需要为每个年龄创建一个新密钥,我想使用一些条件语法(?),例如:
<xsl:key name="kOffspring" match="Horse[/Age=3]" use="SireID"/>
正如你所看到的,我真的不知道我在做什么,也不知道这是否可能:-)
.
类似的另一种情况是需要计算有多少匹马是获胜者 - 答案=4(不是获胜次数,只是他们是否以配速或小跑获胜......第三种情况需要仅以配速或仅以小跑获胜)。
我在 Sire 模板中尝试了以下方法:
<xsl:value-of select="count(key('kOffspring', ID)/*/Wins > 0)"/>
但这只返回计数为一。
如果这里有任何专家可以帮助我前进,我将不胜感激。我发现与其他编程语言相比,xslt 语法有点令人困惑且难以记住 - 我希望我能尽快掌握它,因为它非常强大。
问候,
布莱斯·斯坦伯格。