1

xDoc 变量加载 XML 内容,但我无法检索任何信息。它返回 NULL:

var xDoc = XDocument.Load(Config.CredentialFileName);

//method 1
IEnumerable<XElement> rows = from row in xDoc.Descendants("domain")
                             where (string)row.Attribute("name") == "TEST"
                             select row;
//method 2
var list = xDoc.Descendants("domain")
    .Select(d => new
    {
        name = d.Attribute("name").Value,
        username = d.Attribute("username").Value,
        password = d.Attribute("password").Value //,
    })
    .Where(a => a.name == "TEST")
    .ToList();

XML 文件:

<domains>
  <domain name="TEST" userName="test" password="tSEvmlsmwEkjSxUwrCVf3G6"/>
</domains>

谢谢

4

2 回答 2

1

您的第一种方法适用于您提供的 xml。确保您正在解析具有完全相同结构的 xml。还要检查您是否有至少一个名称等于的域元素TEST。并确保您的 xml 中没有定义命名空间。

第二种方法在userName属性名称中有错字(你有小写username):

var list = xDoc.Descendants("domain")
                .Select(d => new {
                    name = d.Attribute("name").Value,
                    username = d.Attribute("userName").Value, // <-- typo here
                    password = d.Attribute("password").Value
                })
                .Where(a => a.name == "TEST")
                .ToList();

另外,我建议使用强制转换而不是读取节点Value属性,因为如果节点不存在,获取此属性将引发异常。

var domains = from d in xDoc.Descendants("domain")
              let name = (string)d.Attribute("name")
              where name == "TEST"
              select new {
                  Name = name,
                  Username = (string)d.Attribute("userName"),
                  Password = (string)d.Attribute("password")
              };
于 2013-01-04T23:02:06.993 回答
0

见下文。

  var xDoc= XElement.Load(Config.CredentialFileName);             

var result =  xDoc.Elements("domain").Where(x => x.Attribute("name").Value.Equals("TEST")).ToList();
于 2013-01-04T22:48:11.480 回答