Поиск через несколько атрибутов в 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']