8

我正在尝试在 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>

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

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

4

4 回答 4

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
}

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

Microsoft 还提供了一个 How-To:如何:使用 System.Xml.XmlDocument 类在 Visual C# .NET 中执行 XPath 查询

于 2008-12-09T19:32:04.860 回答
2

搜索 XML 是XPath的用途。您没有指定您使用的是什么语言,但这里有一篇关于在 Java 中使用 XPath 处理 XML 的文章,还有一篇使用 C# 的文章。

于 2008-12-09T19:16:36.187 回答
1

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

一个或多个 XPath 表达式(其评估类型为布尔值)可以使用布尔运算符“and”和“or”以及使用 XPath 函数not()连接在一起。

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

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

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

whereyour-ds-usernameyour-ds-UserPassword应该用您要从数据集中使用的相应值替换。

于 2008-12-10T02:37:32.537 回答
0

要在 XML 标签的情况下搜索多个属性,我们可以使用以下 XPATH /APIS/API/field[@Username='username1'][@UserPassword='password1']

于 2014-11-04T12:23:33.653 回答