linq to xml:如何在 C# 中获取元素中标记的值
linq to xml: How to get value of a tag in an element in C#
我有以下 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());
我收到错误:
Sequence contains no elements.
此外,我还想在同一个查询中访问 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();
这是有效的代码。
XDocument
而不是
XElement
如@DKR 所说,结束.Element。
我有以下 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());
我收到错误:
Sequence contains no elements.
此外,我还想在同一个查询中访问 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();
这是有效的代码。
XDocument
而不是
XElement
如@DKR 所说,结束.Element。