通过XML查找多个属性

时间:2008-12-09 19:04:08

标签: 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>

我需要检查“字段”中的用户名和UserPassword值是否与我的数据集值进行比较,是否有一种方法可以检查多个属性(AND条件)而无需编写自己的使用逻辑标志和突破循环。

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

4 个答案:

答案 0 :(得分:26)

要在您提供的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
}

请注意,用户名和密码都不能包含单引号,否则上述示例将失败。这是some info on this peculiarity

还提供了Microsoft提供的方法:HOW TO: Use the System.Xml.XmlDocument Class to Execute XPath Queries in Visual C# .NET

答案 1 :(得分:2)

搜索XML是XPath的用途。您没有指定您正在使用的语言,但是here's an article使用Java中的XPath处理XML,使用C#指定here's one

答案 2 :(得分:1)

这是关于XPath表达式的常见问题解答。

可以使用boolean operators“和”and“或”并使用XPath函数not()将一个或多个XPath表达式(其求值类型为布尔值)连接在一起。

请注意,这些名称均为小写。 XPath区分大小写,并且这些名称的任何其他大写(例如“AND”)将不会被识别为逻辑运算符的名称。

因此,在这种特殊情况下,所需的XPath表达式将如下所示:

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

其中your-ds-usernameyour-ds-UserPassword应替换为您要在数据集中使用的相应值。

答案 3 :(得分:0)

要在XML标记的情况下搜索多个属性,我们可以使用以下XPATH     / APIS / API /字段[@Username =&#39; username1&#39;] [@ UserPassword =&#39; password1&#39;]