linq to xml:如何在C#中获取元素中标记的值
本文关键字:元素 获取 xml to linq | 更新日期: 2023-09-27 18:15:11
我有以下xml数据。
<?xml version="1.0" encoding="utf-8" ?>
<mail>
<id>signUpConfirmation</id>
<subject>Activation</subject>
<body>
Hi, You account is activated 'nRegards
</body>
</mail>
我需要根据我通过的id从<body>
标签读取值。
这就是我尝试过的
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标记的值。
您有几个问题:
id
和body
不是属性而是元素,因此需要使用.Elements
- 您正在使用
XElement
来解析xml。它将从第一个元素mail
开始,然后您将查找其名称为mail
的子元素,这些子元素不存在。使用XDocument
代码:
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();
var str = XDocument.Parse("<?xml version='"1.0'" encoding='"utf-8'" ?><mail> <id>signUpConfirmation</id> <subject>Activation</subject> <body>Hi, You account is activated 'nRegards</body></mail>");
var result = from mail in str.Elements("mail")
where (string)mail.Element("id") == "signUpConfirmation"
select mail.Element("body");
result.FirstOrDefault();
这是有效的代码。
X文档
而不是
XElement
结束。正如@DKR所说的元素。