用于检查多个子节点上的属性值的XPath表达式

时间:2012-03-06 20:44:20

标签: xml xpath

鉴于下面的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>

3 个答案:

答案 0 :(得分:2)

如果您使用的是XPath 2.0,则exists()函数会返回truefalse ...

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