8

XML で複数の属性を検索しようとしています:

<APIS>
  <API Key="00001">
    <field Username="username1" UserPassword="password1" FileName="Filename1.xml"/>
    <field Username="username2" UserPassword="password2" FileName="Filename2.xml"/>
    <field Username="username3" UserPassword="password3" FileName="Filename3.xml"/>
  </API>
</APIS>

「フィールド」でユーザー名とユーザーパスワードの値が両方ともデータセットの値と比較しているものであるかどうかを確認する必要があります。フラグを使用して壊れる独自のロジックを記述せずに複数の属性 (AND 条件) をチェックできる方法はありますか?ループ外。

それを行う XMLDoc の組み込み関数はありますか? どんな助けでも大歓迎です!

4

4 に答える 4

26

提供した XML のスニペットで必要なものを検索するには、次の XPath 式が必要です。

/APIS/API/field[@Username='username1' and @UserPassword='password1']

これは、ユーザー名とパスワードが一致する場合は何かを返しますが、一致しない場合はそうではありません。

もちろん、XPath 式は単なる文字列です。たとえば、フォーム フィールドに入力された値を使用して動的に作成できます。

あなたがどの言語/環境にいるかを伝えると、ここに投稿されたコード サンプルがより具体的になる可能性があります。

これは C# で行う方法です (VB.NET は類似しています)。

// make sure the following line is included in your class
using System.Xml;

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("your XML string or file");

string xpath = "/APIS/API/field[@Username='{0}' and @UserPassword='{1}']";
string username = "username1";
string password = "password1";

xpath = String.Format(xpath, username, password);
XmlNode userNode = xmldoc.SelectSingleNode(xpath);

if (userNode != null)
{
  // found something with given user name and password
}
else
{
  // username or password incorrect
}

ユーザー名にもパスワードにも単一引用符を含めることはできないことに注意してください。そうしないと、上記の例が失敗します。この特異性に関する情報を次に示します。

Microsoft から入手可能なハウツーもあります。HOW TO: Visual C# .NET で System.Xml.XmlDocument クラスを使用して XPath クエリを実行する

于 2008-12-09T19:32:04.860 に答える
2

XML の検索は、XPathが作成された目的です。使用している言語は特定されませんでしたが、Java で XPath を使用して XML を処理する記事と、 C# を使用した記事があります。

于 2008-12-09T19:16:36.187 に答える
1

これはXPath式に関する FAQです。

1 つ以上の XPath 式 (評価された型がブール型) は、ブール演算子「and」と「or」および XPath 関数not()を使用して結合できます。

これらの名前はすべて小文字であることに注意してください。XPath では大文字と小文字が区別され、これらの名前の他の大文字化 (「AND」など) は、論理演算子の名前として認識されません。

したがって、この特定のケースでは、必要な XPath 式は次のようになります。

/*/*/field[@Username = your-ds-username and @UserPassword = your-ds-UserPassword]

whereyour-ds-usernameyour-ds-UserPasswordは、データセットから使用するそれぞれの値に置き換える必要があります。

于 2008-12-10T02:37:32.537 に答える