使用XElement进行XML解析

7

使用XElement似乎找不到适当的解析方法:

<messages>
  <message subclass="a" context="d" key="g">
  <message subclass="b" context="e" key="h">
  <message subclass="c" context="f" key="i">
</messages>

我希望将这个信息发送到一个列表中,其中包含三个字符串:子类、上下文和关键字。

2个回答

25

您的输入不是有效的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文档,如果你正在处理一个XML文件或流,例如,可以使用Load方法而不是Parse。此外,如果您定义了一个具体的类,则可以选择将其选入该类中。假设有一个类定义:

class Message 
{
    public string Subclass { get; set; }
    public string Context { get; set; } 
    public string Key { get; set; }
}

您可以在查询中使用select new Message,这样的结果将是List<Message>,而当前它是一个匿名类型的列表。


3
XElement 中,我只使用 Descendants() 方法,并使用 LINQ 得到结果。
var abc = doc.Descendants()
    .Where(t => t.Name.LocalName == "pqr")
    .Select(t => t.Value)
    .FirstOrDefault();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接