当存在1个属性而另一个不存在时,xpath选择2个属性

时间:2013-12-21 17:17:48

标签: xpath attributes

我有这个XML:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="Myxslt.xml" type="application/xml"?>
<Player>
<information id="2" >Gretzky</information>
</Player>
<Player>
<information id="3" goalie="true">Fuhr</information>
</Player>

我想只检索有信息ID且不是守门员的玩家。
这是我的“测试”不起作用

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//*[@id|not(@goalie)]">
....
</xsl:template>
</xsl:stylesheet>

此行不起作用

<xsl:template match="//*[@id|not(@goalie)]">

就像我内心有错误一样。

它可以正常使用1个属性:

<xsl:template match="//*[@id">

<xsl:template match="//*[@goalie">

有人可以对此有所了解吗?

感谢

1 个答案:

答案 0 :(得分:0)

如果您希望元素具有id 没有goalie属性,则使用两个谓词:

<xsl:template match="*[@id][not(@goalie)]">

使用多个谓词,每个谓词都会过滤前一个列表,因此它们可以有效地“结合”在一起。

另请注意,匹配模式中不需要前导//,因为默认情况下,模式在所有级别都匹配,除非它们是以单个/开头的绝对路径。