我有这样的示例XML:
<users>
<user name="user1">
<roles separator=",">ADM,USER</roles>
</user>
<user name="user2">
<roles separator=",">ADM,GUEST</roles>
</user>
<user name="user3">
<roles separator=",">READER,GUEST</roles>
</user>
</users>
使用 XPath表达式,是否有办法让所有用户担任角色 GUEST ?
答案 0 :(得分:1)
答案 1 :(得分:1)
使用强>:
/users/user/[roles[contains(concat(@separator, ., @separator),
concat(@separator, 'GUEST', @separator)
)
]
]
这会选择所有需要的user
个节点,无论'GUEST'
是唯一的角色,还是位于字符串的开头,中间或末尾。
答案 2 :(得分:0)
如果您能够使用XSLT 2.0,我建议您对角色字符串进行标记。只要你没有开始使用像“EXTERNALGUEST”这样的角色名称或类似角色,就可以使用contains()
,因为它会与之匹配。
/users/user[tokenize(roles, roles/@separator) = 'GUEST']/@name
此XPath将根据roles
对@separator
进行标记,并返回具有此角色的用户。