带有多个谓词的Xpathexpression式
我正在尝试构build一个复杂的xpathexpression式,它将回答以下情况。
从下面的XML数据中,返回用户实体:
- 他的login名是“ user1 ”
- 他的名字是“ 用户1 ”
-
他有两个不同的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'