1

我一直在玩弄 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>

>

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。

我确信有一个简单的解决方案,但它让我望而却步!任何帮助都会很棒。

4

2 回答 2

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));
}
于 2013-01-23T04:46:01.517 回答
0

我想出了答案……但我不确定为什么会这样。我对 XML 还是有点陌生​​...

我将“item.Element(“user”).Element(“username”).Value”更改为“item.Element(“username”).Value”。还将“from item in doc.Descendants("users")”更改为“from item in doc.Descendants("user")”

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,我会得到适当的结果。

奇怪的。

于 2013-01-23T04:33:37.803 回答