我正在尝试构建一个复杂的xpath表达式,它将回答以下条件.
从下面的XML数据中,返回User实体,其中:
他的登录名是" user1 "
他的名字是" 用户1 "
他有2个不同的配置文件值,分别是" operator "和" admin "(我不知道前面的确切顺序)
user1 User 1 admin 2 admin users operator 1 Operator user2 User 2 admin 4 admins users poweruser 5 power users
有人可以为这种情况提供一个例子吗?
编辑:添加了复杂的配置文件实体
以下应该做你想要的:
/root/user[login='user1' and name='User 1' and profile='admin' and profile='operator']
对profile
值进行两次测试可能看起来很奇怪,但由于存在多个profile
节点,因此只要至少一个节点与测试匹配,就会满足条件.
你可以比较的原因profile
直接到string
,即使它实际上是一个node
是,string-value
一个元素节点的是string-value
它的所有后代串联在一起,在这种情况下,仅仅是内容的value
.
如果profile
包含的元素多于value
您必须使用稍微复杂的谓词测试来确定是否存在匹配profile
节点value
(这应该与您更新的问题一起使用):
/root/user[login='user1' and name='User 1' and profile[value='admin'] and profile[value='operator']]
这是一个更准确的答案(目前Greg Beech的答案没有检查问题中的条件3. user
元素必须有2个profile
孩子):
/*/user [login='user1' and name='User 1' and not(profile[3]) and profile/value='admin' and profile/value='operator' ]