通过xslt在xml标记的两个属性中赋予不同的值

时间:2018-10-21 03:57:17

标签: xml xslt xpath

我正在尝试捕获两个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>

1 个答案:

答案 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>