我正在尝试捕获两个differents标签的不同值。 // jogo中的标签“ @mandante”和“ @visitante”代表国家/地区,因此我想生成一个具有不同国家/地区值的列表。
我有什么
<xsl:key name="contry" match="//jogo/@mandante | //jogo/@visitante" use="text()"/>
...
<ul>
<xsl:for-each select="(//jogo/@mandante | //jogo/@visitante)[generate-id()= generate-id(key('contry',text()))]">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
xml文件示例
<grupo nome="A">
<jogo data="1982-06-14T17:15:00+03:00" mandante="Itália" visitante="Polónia">
</jogo>
<jogo data="1982-06-15T17:15:00+03:00" mandante="Peru" visitante="Camarões">
</jogo>
<jogo data="1982-06-18T17:15:00+03:00" mandante="Itália" visitante="Peru">
<eventos>
<evento tipo="gol" time="mandante">
<jogador>Conti</jogador>
<minuto>18</minuto>
</evento>
<evento tipo="gol" time="visitante">
<jogador>Díaz</jogador>
<minuto>83</minuto>
</evento>
</eventos>
</jogo>
</grupo>
答案 0 :(得分:0)
@mandante
和@visitante
不是标签。它们是 属性 -并且属性没有子文本节点。这就是为什么表达式text()
在key
定义和key()
调用中什么都没有选择的原因。
请注意,在匹配模式中使用//
不会执行任何操作。
以这种方式尝试:
XSLT 1.0
<xsl:key name="country" match="jogo/@mandante | jogo/@visitante" use="."/>
...
<ul>
<xsl:for-each select="(//jogo/@mandante | //jogo/@visitante)[generate-id()= generate-id(key('country', .))]">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>