我一直在玩XML,试图了解它是如何工作的,并遇到了一个奇怪的问题。有时,当我查询我的XML文件时,我不会得到我知道存在的结果。事实上,我唯一获得结果的是第一个条目。以下是一些示例XML条目和一个用于查看用户是否存在的小函数。
<users>
<user>
<username>a</username>
<firstname>a</firstname>
<lastname>a</lastname>
</user>
<user>
<username>b</username>
<firstname>b</firstname>
<lastname>b</lastname>
</user>
<user>
<username>rawr</username>
<firstname>a</firstname>
<lastname>a</lastname>
</user>
</users>
&GT;
private bool FindUser(string username)
{
XDocument doc = XDocument.Load(filePath);
var data = from item in doc.Descendants("users")
where item.Element("user").Element("username").Value == username.ToLower()
select new
{
usernameEle = item.Element("user").Element("username").Value
};
var p = data.FirstOrDefault();
if (p != null)
return true;
else
return false;
}
如果我尝试搜索用户“a”,则返回true。如果我搜索任何其他用户名,则返回false。
我确信有一个简单的解决方案,但它是在逃避我!任何帮助都会很棒。
答案 0 :(得分:2)
您的查询只是查看第一个user
元素。您想要更改它以查看所有用户。任何简单的方法都是获取所有“用户”元素,然后在您回答时测试用户名值。
较短的实施方式是:
bool IsUserPresent(string username)
{
username = username.ToLower();
var doc = XDocument.Load(filePath);
return doc
.Descendants("user")
.Any(u => u.Element("username").Value == username));
}
答案 1 :(得分:0)
我想出了答案......但我不确定为什么会这样。我对XML仍然有点新鲜......
我更改了&#34; item.Element(&#34; user&#34;)。元素(&#34;用户名&#34;)。值&#34; to&#34; item.Element(&#34; username&#34;)。Value&#34;。也改变了#doc ;Descendants(&#34; users&#34;)&#34;中的项目。来自doc.Descendants中的项目&#34;(&#34;用户&#34;)&#34;
var data = from item in doc.Descendants("users")
where item.Element("user").Element("username").Value == username.ToLower()
select new
{
usernameEle = item.Element("user").Element("username").Value
};
到
var data = from item in doc.Descendants("user")
where item.Element("username").Value == username.ToLower()
select new
{
usernameEle = item.Element("username").Value
};
现在能够检索的不仅仅是第一个条目。如果我搜索b或rawr,我会得到相应的结果。
奇