0

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

4

3 回答 3

1

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

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

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

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

高温下,

彼得

于 2016-04-05T07:21:50.113 回答
0

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

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

但是您展示的 XML 有users,不是user,作为最外层元素。

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

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

于 2016-04-08T01:30:49.210 回答
-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

于 2016-04-05T09:57:44.433 回答