xpathwhere && clause



我有类似的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

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

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

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

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

HTH,

Peter

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

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

但是您显示的XML的最外层元素是users,而不是user

从短期来看,使用...//user而不是像prker的回答中所做的那样使用.../user将解决这个问题。(他建议只使用一个谓词是没有意义的,与你遇到的任何问题都无关。)这个问题也可以通过正确的路径来解决:doc("users")/users/user...

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

它与这个一起工作

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

引用自http://www.w3schools.com/xsl/xquery_intro.asp

相关内容

  • 没有找到相关文章

最新更新