xpath其中&&条款

时间:2016-04-05 06:23:01

标签: xpath xquery sedna

我有像这样的xml数据

<users>
    <user email="email@email.com">
        <password>pass</password>
        ..
    </user>
</users>

我想通过电子邮件和密码检索用户记录(xml格式)过滤。 我试过了

for $user in doc("users")/user
               [@email="'.$email.'"]
               [password="'.$password.'"] 
return $user

但我收到错误。

请问,如何以xml格式检索用户的数据,以便我可以使用domdocument或simplexmlparser之类的东西来获取相应的节点?

我的推荐是http://www.w3schools.com/xsl/xpath_syntax.asp

3 个答案:

答案 0 :(得分:1)

您可能希望将约束组合为一个约束

for $user in doc("users")//user[@email="'.$email.'" and password="'.$password.'"] return $user

这也可以通过以下方式实现:

doc("users")//user[@email="'.$email.'" and password="'.$password.'"]

HTH,

彼得

答案 1 :(得分:0)

您报告的错误的最可能原因是您的查询要求user元素显示为users文档的最外层元素,并且满足一些进一步的约束,因此:

doc("users")/user[...][...]

但您展示的XML的最外层元素为users,而非user

在短期内,使用...//user代替.../user,就像在prker的答案中所做的那样,将解决此问题。 (他建议只使用一个谓词没有任何意义,与你遇到的任何问题无关。)通过正确的路径也可以解决问题:doc("users")/users/user...

从长远来看,您应该学会了解XPath表达式中发生的事情。这里,doc("users")返回您指定的XML文档根目录下的文档节点,下一步/user/child::user的缩写)请求名为{{1}的元素节点}这是文档节点的子节点。

答案 2 :(得分:-1)

它适用于此

'for $user in doc("users")//user 
  where 
    $user/password = "'.$password.'" and 
    $user[@email="'.$email.'"] 
  return $user ';

来自http://www.w3schools.com/xsl/xquery_intro.asp

的参考资料