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

голоса
7

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

Мне нужно проверить, если в «поле» значение Имени пользователя и Парольпользователь оба, что я сравниваю со своими значениями Dataset, есть способ, где я могу проверить несколько атрибутов (и их состояние) без написания моей собственной логики использования флагов и нарушения из петель.

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

Задан 09/12/2008 в 20:04
источник пользователем
На других языках...                            


4 ответов

голоса
25

Для того, чтобы искать то, что вы хотите в фрагменте 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
}

Имейте в виду , что ни имен пользователей , ни пароли могут содержать одиночные кавычки, или в приведенном выше примере будет выполнена. Вот некоторая информация об этой особенности .

Существует также How-To от Microsoft доступен: КАК: Используйте System.Xml.XmlDocument класс Выполнить запросы XPath в Visual C # .NET

Ответил 09/12/2008 в 20:32
источник пользователем

голоса
2

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

Ответил 09/12/2008 в 20:16
источник пользователем

голоса
1

Это часто задаваемые вопросы о XPath выражений .

Один или несколько выражений XPath (которых оценивали тип булево), могут быть соединены друг с другом , используя логические операторы «и» и «или» , а с помощью функции XPath нет () .

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

Таким образом, в данном случае выражение разыскиваемого XPath будет что-то как:

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

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

Ответил 10/12/2008 в 03:37
источник пользователем

голоса
0

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

Ответил 04/11/2014 в 12:23
источник пользователем

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