鉴于下面的XML,我正在寻找一个XPath查询来回答以下问题:
上述XML描述的语言列表是否包含所有这些语言:“英语”,“法语”和“挪威语”?
换句话说,有没有办法找出“实体”节点是否包含一组给定的语言?对于“英语”,“法语”和“挪威语”,答案为TRUE,对于“阿拉伯语”,“英语”,“法语”和“挪威语”,答案为FALSE。
<Document>
<Entities>
<Entity Name="Afrikaans" Id="2000" Type="Language"/>
<Entity Name="Dansk" Id="2002" Type="Language"/>
<Entity Name="Deutsch" Id="2003" Type="Language"/>
<Entity Name="English" Id="2005" Type="Language"/>
<Entity Name="Español" Id="2006" Type="Language"/>
<Entity Name="French" Id="2007" Type="Language"/>
<Entity Name="Indonesian" Id="2010" Type="Language"/>
<Entity Name="Italiano" Id="2012" Type="Language"/>
<Entity Name="Norwegian" Id="2018" Type="Language"/>
</Entities>
</Document>
答案 0 :(得分:2)
如果您使用的是XPath 2.0,则exists()
函数会返回true
或false
...
exists(/*/Entities[*/@Name='English' and */@Name='French' and */@Name='Norwegian'])
答案 1 :(得分:0)
此XPath
/Document/Entities/Entity[@Name='Norwegian'] and /Document/Entities/Entity[@Name='French'] and /Document/Entities/Entity[@Name='English']
如果所有三种语言都存在,则将为true
,否则为false
答案 2 :(得分:0)
在XPath 1.0中使用:
/*/*/Entity/@Name = 'English'
and
/*/*/Entity/@Name = 'French'
and
/*/*/Entity/@Name = 'Norwegian'
在XPath 2.0中使用:
every $lang in ('English', 'French', 'Norwegian')
satisfies
$lang = /*/*/Entity/@Name