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

しかし、私はエラーが発生します。

domdocument や simplexmlparser などを使用してそれぞれのノードを取得できるように、そのユーザーのデータを xml 形式で取得するにはどうすればよいですか?

私の参照はhttp://www.w3schools.com/xsl/xpath_syntax.aspでした

4

3 に答える 3

1

おそらく、これらの制約を 1 つの制約に結合したいと思うでしょう。

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

これは、次の方法で一度に達成することもできます。

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

HTH、

ピーター

于 2016-04-05T07:21:50.113 に答える
0

報告されたエラーの最も可能性の高い原因はuser、ドキュメントの最も外側の要素として表示され、usersさらにいくつかの制約を満たす要素をクエリが要求したことです。

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

しかし、あなたが示した XML は、最も外側の要素としてusersではなくを持っています。user

短期的には、prker's answer で行われているように、...//user代わりにを使用すると、この問題が解決します。.../user(単一の述語のみを使用するという彼の推奨は無意味であり、あなたが抱えていた問題とは何の関係もありません。) この問題は、パスを正しくすることによっても修正できます。 doc("users")/users/user...

長期的には、XPath 式で何が起こっているのかを理解する必要があります。ここでdoc("users")は、指定した XML ドキュメントのルートにあるドキュメント ノードを返します。次のステップ/user( の略)は、ドキュメント ノードの子である /child::userという名前の要素ノードを要求します。user

于 2016-04-08T01:30:49.210 に答える