Поиск через несколько атрибутов в XML

Я пытаюсь найти несколько атрибутов в 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>

Мне нужно проверить, являются ли в" поле " значения Username и UserPassword тем, что я сравниваю со значениями набора данных, есть ли способ, которым я могу проверить несколько атрибутов (и условие) без написания моей собственной логики использования флагов и выхода из циклов.

есть ли встроенная функция XMLDoc, которая это делает? Любая помощь будет оценена!

4 ответов


для поиска того, что вы хотите в фрагменте XML, который вы предоставили, вам понадобится следующее выражение XPath:

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

это либо вернет что - то, если имя пользователя и пароль совпадают-или нет, если они этого не делают.

of couse выражение 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:как: используйте систему.XML.Класс XmlDocument для выполнения запросов XPath в Visual C# .NET


Поиск XML-это то, что XPath-выражения было сделано для. Вы не указали, какой язык вы используете, но вот статья при обработке XML с использованием XPath в Java и вот на C#.


это FAQ о XPath-выражения выражения.

одно или несколько выражений XPath (чей оценочный тип является логическим) могут быть соединены вместе с помощью логические операторы "и" И "ИЛИ" и с помощью функции XPath не().

обратите внимание, что имена всех из них в нижнем регистре. XPath чувствителен к регистру и любой другой капитализации этих имен (например as "AND") не будет распознаваться как имя логических операторов.

таким образом, в данном конкретном случае выражение wanted XPath будет выглядеть следующим образом:

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

здесь your-ds-username и your-ds-UserPassword должны быть заменены соответствующими значениями, которые вы хотите использовать из набора данных.


для поиска нескольких атрибутов в случае XML-тега мы можем использовать следующий XPATH /APIS / API / field[@Username= 'username1'] [@UserPassword= 'password1']