我试图构建一个复杂的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']]