xml – 具有多个谓词的Xpath表达式

我试图构建一个复杂的xpath表达式,将回答以下条件。

从下面的XML数据,返回用户实体,其中:

>他的登录名是“user1”
>他的名字是“用户1”
>他有2个不同的配置文件值,“operator”和“admin”(我不知道前面的确切顺序)

<user>
  <login>user1</login>
  <name>User 1</name>
  <profile>
    <value>admin</value>
    <id>2</id>
    <description>admin users</description>
  </profile>
  <profile>
    <value>operator</value>  
    <id>1</id>
    <description>Operator</description>
  </profile>
</user>

<user>
  <login>user2</login>
  <name>User 2</name>
  <profile>
    <value>admin</value>
    <id>4</id>
    <description>admins users</description>
  </profile>
  <profile>
    <value>poweruser</value>  
    <id>5</id>
    <description>power users</description>
  </profile>
</user>

</root>

有人可以为这种情况提供一个例子吗?

编辑:添加了一个复杂的配置文件实体

以下应该做你所做的:
/root/user[login='user1' and 
           name='User 1' and 
           profile='admin' and
           profile='operator']

配置文件值进行两个测试可能看起来很奇怪,但是由于有多个配置文件节点,所以只要至少一个节点与测试匹配,则条件将被满足。

你可以直接比较配置文件直接到一个字符串的原因,即使它实际上是一个节点是一个元素节点的字符串值是它的所有后代串联在一起的字符串值,在这种情况下,只是值的内容

如果配置文件包含比元素更多的元素,则必须使用稍微更复杂的谓词测试来根据值确定匹配配置文件节点的存在(这应该与您更新的问题一起使用):

/root/user[login='user1' and 
           name='User 1' and 
           profile[value='admin'] and
           profile[value='operator']]

相关文章

引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满足人的生产生活需要而产生的。具体...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
http://blog.jobbole.com/79252/ 引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满...
(点击上方公众号,可快速关注) 公众号:smart_android 作者:耿广龙|loonggg 点击“阅读原文”,可查看...
一、xml与xslt 相信所有人对xml都不陌生,其被广泛的应用于数据数据传输、保存与序列化中,是一种极为强...