XPath表达式 - 需要帮助

时间:2010-08-04 08:19:48

标签: xml xpath

我有这样的示例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

3 个答案:

答案 0 :(得分:1)

此XPath表达式将选择角色节点包含GUEST的所有用户。

//user[contains(roles, 'GUEST')]

请参阅contains xpath函数。

答案 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进行标记,并返回具有此角色的用户。