通过XML查找多个属性

Mur*_*dvi 8 xml search xml-attribute

我正在尝试在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>
Run Code Online (Sandbox Code Playgroud)

我需要检查在"字段"中Username和UserPassword值是否与我的数据集值进行比较,是否有一种方法可以检查多个属性(AND条件)而无需编写自己的使用Flags和破坏的逻辑没有循环.

是否有XMLDoc的内置函数可以做到这一点?任何帮助,将不胜感激!

Tom*_*lak 26

要在您提供的XML片段中搜索所需内容,您需要以下XPath表达式:

/APIS/API/field[@Username='username1' and @UserPassword='password1']
Run Code Online (Sandbox Code Playgroud)

如果用户名和密码匹配,这将返回一些东西 - 如果不匹配则返回.

例如,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
}
Run Code Online (Sandbox Code Playgroud)

请注意,用户名和密码都不能包含单引号,否则上述示例将失败.这是关于这种特性的一些信息.

还提供了Microsoft的How-To:HOW TO:使用System.Xml.XmlDocument类在Visual C#.NET中执行XPath查询