我有一个Xml文件: -
<Users>
<User Name="abc" Pass="asp"></User>
<User Name="def" Pass="net"></User>
</Users>
我必须编写一个代码,其中在文本框中输入两个用户输入值,例如: - usernm和pass将根据特定节点的属性及其传递来检查以返回真值。
我想检查d输入usernm并传递属性名称,如果匹配将检查传递并返回真实的fasle值。
请在不使用迭代器和无数的情况下建议。
答案 0 :(得分:1)
LINQ to XML几乎都基于迭代器,所以很难不使用它们......但我怀疑你想要这样的东西:
return doc.Descendants("User")
.Any(x => (string) x.Attribute("Name") == targetName &&
(string) x.Attribute("Pass") == targetPassword);
或者将其分配给变量:
bool foundUser = doc.Descendants("User")
.Any(x => /* code as before */);
或者确实希望它为if
条件:
if (doc.Descendants("User")
.Any(x => /* code as before */))
{
}
我个人 将提取到一个单独的方法(根据第一个例子可以只是return语句)或使用局部变量来简化 - 我不喜欢我的if
条件这么复杂。
这将确定任何User
元素是否与相关属性匹配。当然,它没有提供有关匹配元素的任何信息。为此,您需要使用FirstOrDefault
而不是Any
,然后如果元素为非null,那就是第一个匹配。