2012-02-01 8 views
5

thể dường như không tìm thấy làm thế nào để thích hợp phân tích cú pháp này sử dụng XElement:Phân tích XML sử dụng XElement

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

Tôi muốn có được điều này ra một danh sách mà là ba chuỗi lớp con, bối cảnh, quan trọng.

Trả lời

22

Dữ liệu nhập của bạn không hợp lệ XML, nó thiếu thẻ đóng trên các phần tử thư bên trong. Nhưng giả sử định dạng là hợp lệ, bạn có thể phân tích ra cấu trúc của bạn như trong:

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(); 

Bạn cũng có thể sử dụng XDocument cho một tài liệu XML đầy đủ, và sử dụng phương pháp Load thay vì Parse nếu bạn đang sử dụng một tập tin XML hoặc một luồng, ví dụ. Ngoài ra, bạn có thể chọn vào một lớp cụ thể nếu bạn đã xác định. Với một định nghĩa lớp của

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

Bạn có thể sử dụng select new Message trong truy vấn, và kết quả sẽ là một List<Message>, trong khi ngay bây giờ nó là một danh sách của một loại vô danh.