Finden Sie durch mehrere Attribute in XML

stimmen
7

Ich versuche, mehrere Attribute in XML zu suchen:

<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>

Ich muss überprüfen, ob im „Feld“ der Benutzername und das Userpassword-Werte beide sind, was ich mit meinem Dataset Werte bin im Vergleich, ist es eine Möglichkeit, wo ich mehrere Attribute überprüfen (UND-Bedingung), ohne meine eigene Logik schreiben Flags der Verwendung und Brechen aus Schleifen.

Gibt es eine eingebaute Funktion von XMLDoc, die es tut? Jede mögliche Hilfe würde geschätzt!

Veröffentlicht am 09/12/2008 um 20:04
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
25

Für die Suche nach was Sie im Snippet von XML möchten Sie zur Verfügung gestellt, müssten Sie den folgenden XPath-Ausdruck:

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

Dies würde entweder etwas zurückgeben, wenn Benutzername und Passwort übereinstimmen - oder auch nicht, wenn sie es nicht tun.

Von couse der XPath-Ausdruck nur eine Zeichenfolge ist - Sie können es dynamisch mit Werten aufbauen können, die in ein Formularfeld eingegeben wurden, zum Beispiel.

Wenn Sie sagen, welche Sprache / Umgebung Sie sind in, Code-Beispiele hier gepostet wird wahrscheinlich präziser erhalten.

Dies ist ein Weg, um es in C # zu tun (VB.NET ist analog):

// 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
}

Beachten Sie, dass weder Benutzernamen noch Passwörter einfache Anführungszeichen enthalten kann, oder das obige Beispiel wird fehlschlagen. Hier einige Informationen über diese Besonderheit .

Es gibt auch ein How-To von Microsoft erhältlich: Gewusst wie: Verwenden Sie die System.Xml.XmlDocument Klasse von XPath - Abfragen auf Ausführen in Visual C # .NET

Beantwortet am 09/12/2008 um 20:32
quelle vom benutzer

stimmen
2

XML - Suche ist es, was XPath gemacht wurde. Sie hat nicht angegeben , welche Sprache Sie verwenden, aber hier ist ein Artikel über die XML - Verarbeitung XPath in Java verwendet, und hier ist ein C #.

Beantwortet am 09/12/2008 um 20:16
quelle vom benutzer

stimmen
1

Dies ist eine FAQ über XPath - Ausdrücke .

Ein oder mehrere XPath - Ausdrücke (deren ausgewertet Typ boolean), kann mit den miteinander verbunden werden Booleschen Operatoren „und“ und „oder“ und mit der XPath - Funktion nicht () .

Beachten Sie , dass die Namen dieser alles in Kleinbuchstaben sind . XPath ist Groß- und Kleinschreibung eine andere Aktivierung dieser Namen (wie „AND“) wird nicht als Name der logischen Operatoren erkannt werden.

Also, in diesem speziellen Fall der gewünschte XPath-Ausdruck wird etwas wie die folgenden sein:

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

wo your-ds-usernameund your-ds-UserPasswordsoll mit den entsprechenden Werten ersetzt werden Sie aus dem Datensatz verwendet werden sollen.

Beantwortet am 10/12/2008 um 03:37
quelle vom benutzer

stimmen
0

Um mehrere Attribute bei XML-Tag zu suchen, können wir die folgenden XPath / APIS / API / Feld [@ Username = 'username1'] verwenden [@ Userpassword = 'password1']

Beantwortet am 04/11/2014 um 12:23
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more