带有多个谓词的Xpathexpression式

我正在尝试构build一个复杂的xpathexpression式,它将回答以下情况。

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

  1. 他的login名是“ user1
  2. 他的名字是“ 用户1
  3. 他有两个不同的configuration文件值是“ 运营商 ”和“ pipe理员 ”(我不知道前面的确切顺序)

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

有人可以提供这样一个例子吗?

编辑:添加一个复杂的configuration文件实体

以下应该做你以后的事情:

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

profile值进行两次testing可能看起来很奇怪,但是由于有多个profile节点,只要至less有一个节点与testing相匹配,条件就会得到满足。

你可以直接比较一个string到一个string ,即使它实际上是一个node是,一个元素节点的string-value是所有后代串联在一起的string-value ,在这种情况下,只是value的内容。

如果profile包含的元素value更多,则必须使用稍微复杂一些的谓词testing来确定是否存在匹配profile节点(仅适用于更新的问题):

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

这里是一个更确切的答案 (目前格雷格Beech的答案不检查条件3.在问题: user元素必须有2个profile孩子):

 /*/user [login='user1' and name='User 1' and not(profile[3]) and profile/value='admin' and profile/value='operator' ] 

假设users是根:

 /users/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'