linq to xml:如何在C#中的元素中获取标记的值

时间:2016-10-26 07:30:29

标签: c# .net xml linq linq-to-xml

我有以下xml数据。

<?xml version="1.0" encoding="utf-8" ?>
<mail>
  <id>signUpConfirmation</id>
  <subject>Activation</subject>
  <body>
Hi, You account is activated \nRegards
</body>
</mail>

我需要从<body>标签中读取值,具体取决于我传递的ID。

这就是我试过的

var xml = File.ReadAllText("C:\\Users\\DELL\\Documents\\Visual Studio 2012\\Projects\\Website\\Website\\Files\\Mails.xml");

var str = XElement.Parse(xml);
var result = from mail in str.Elements("mail")
             where (string)mail.Element("id") == "signUpConfirmation"
             select (string)mail.Element("body");
log.Debug("mail data:" + result.First());

我收到错误:

  

序列不包含任何元素。

另外,我想在同一个查询中访问id标记的值。

2 个答案:

答案 0 :(得分:4)

你有几个问题:

  1. idbody不是属性,而是元素,因此您需要使用.Elements
  2. 您正在使用XElement来解析xml。它将从第一个元素mail开始,然后您正在查找名称为mail的子元素 - 它不存在。使用XDocument
  3. 代码:

    var result = (from mail in XDocument.Load("data.xml").Descendants("mail")
                  where mail.Element("id").Value == "signUpConfirmation"
                  select new {
                      Body = mail.Element("body").Value,
                      Subject = mail.Element("subject").Value
                  }).ToList();
    

答案 1 :(得分:1)

var arrOfArrays = [["a","b"],["C","D"]];
var flattened = arrOfArrays.reduce(function(p,c){
    return p.concat(c);
});
console.log(flattened);

这是有效的代码。

  

的XDocument

而不是

  

的XElement

结束.Element为@DKR说。