使用 XElement 解析 XML
Posted
技术标签:
【中文标题】使用 XElement 解析 XML【英文标题】:XML parsing using XElement 【发布时间】:2012-02-23 18:59:36 【问题描述】:似乎找不到如何使用 XElement 适当地解析它:
<messages>
<message subclass="a" context="d" key="g">
<message subclass="b" context="e" key="h">
<message subclass="c" context="f" key="i">
</messages>
我想把它放到一个列表中,其中包含三个字符串子类、上下文、键。
【问题讨论】:
【参考方案1】:您的输入不是有效的 XML,它缺少内部消息元素的结束标记。但是假设格式是有效的,你可以解析出你的结构:
string xml = @"<messages>
<message subclass=""a"" context=""d"" key=""g""/>
<message subclass=""b"" context=""e"" key=""h""/>
<message subclass=""c"" context=""f"" key=""i""/>
</messages>";
var messagesElement = XElement.Parse(xml);
var messagesList = (from message in messagesElement.Elements("message")
select new
Subclass = message.Attribute("subclass").Value,
Context = message.Attribute("context").Value,
Key = message.Attribute("key").Value
).ToList();
您还可以将XDocument
用于完整的XML 文档,并使用Load
方法代替Parse
,例如,如果您使用的是XML 文件或流。此外,如果您定义了一个具体类,则可以选择一个具体类。给定
class Message
public string Subclass get; set;
public string Context get; set;
public string Key get; set;
您可以在查询中使用select new Message
,结果将是List<Message>
,而现在它是一个匿名类型的列表。
【讨论】:
【参考方案2】:在XElement
中,Descendants()
是我使用的唯一方法,它使用 LINQ 给出结果。
var abc = doc.Descendants()
.Where(t => t.Name.LocalName == "pqr")
.Select(t => t.Value)
.FirstOrDefault();
【讨论】:
以上是关于使用 XElement 解析 XML的主要内容,如果未能解决你的问题,请参考以下文章
如何在 XxmlElement 而不是 C# 中的 XElement 上运行 linq
是否存在可二进制序列化的 XML 特定对象(如 XElement)?