2010-06-01 37 views
71

Tôi có một List<string> "sampleList", trong đó cótập tin XML tạo sử dụng XDocument trong C#

Data1 
Data2 
Data3... 

Cấu trúc tập tin là như

<file> 
    <name filename="sample"/> 
    <date modified =" "/> 
    <info> 
    <data value="Data1"/> 
    <data value="Data2"/> 
    <data value="Data3"/> 
    </info> 
</file> 

Tôi hiện đang sử dụng XmlDocument để làm điều này.

Ví dụ:

List<string> lst; 
XmlDocument XD = new XmlDocument(); 
XmlElement root = XD.CreateElement("file"); 
XmlElement nm = XD.CreateElement("name"); 
nm.SetAttribute("filename", "Sample"); 
root.AppendChild(nm); 
XmlElement date = XD.CreateElement("date"); 
date.SetAttribute("modified", DateTime.Now.ToString()); 
root.AppendChild(date); 
XmlElement info = XD.CreateElement("info"); 
for (int i = 0; i < lst.Count; i++) 
{ 
    XmlElement da = XD.CreateElement("data"); 
    da.SetAttribute("value",lst[i]); 
    info.AppendChild(da); 
} 
root.AppendChild(info); 
XD.AppendChild(root); 
XD.Save("Sample.xml"); 

Làm thế nào tôi có thể tạo ra các cấu trúc XML tương tự sử dụng XDocument?

+8

Xin vui lòng gửi mã bạn đã viết cho đến nay. Mọi người thường không thích chỉ viết mã cho bạn. –

+5

Đồng ý - điều này thực sự cực kỳ đơn giản để làm trong một tuyên bố duy nhất, nhưng chỉ cho bạn câu trả lời sẽ không giúp bạn học nhiều. –

Trả lời

161

LINQ to XML cho phép điều này là đơn giản hơn nhiều, qua ba tính năng:

  • Bạn có thể xây dựng một đối tượng mà không biết tài liệu đó là một phần của
  • Bạn có thể xây dựng một đối tượng và cung cấp những đứa trẻ như các đối số
  • Nếu một cuộc tranh cãi là iterable, nó sẽ được lặp qua

Vì vậy, ở đây bạn có thể chỉ cần làm:

0.123.
void Main() 
{ 
    List<string> list = new List<string> 
    { 
     "Data1", "Data2", "Data3" 
    }; 

    XDocument doc = 
     new XDocument(
     new XElement("file", 
      new XElement("name", new XAttribute("filename", "sample")), 
      new XElement("date", new XAttribute("modified", DateTime.Now)), 
      new XElement("info", 
      list.Select(x => new XElement("data", new XAttribute("value", x))) 
     ) 
     ) 
    ); 

    doc.Save("Sample.xml"); 
} 

Tôi đã sử dụng bố cục mã này cố ý để làm cho chính mã phản ánh cấu trúc của tài liệu.

Nếu bạn muốn một yếu tố có chứa một nút văn bản, bạn có thể xây dựng mà chỉ bằng cách đi qua trong văn bản như là một tham số constructor:

// Constructs <element>text within element</element> 
XElement element = new XElement("element", "text within element"); 
+7

@ Jon Skeet: Cảm ơn bạn .... :-) –

+14

Lưu ý: Nếu bạn có các yếu tố cần phải có "văn bản bên trong", bạn thêm chúng như sau: 'XElement mới (" mô tả "," đây là nội dung bên trong của phần tử mô tả. ");' (tương tự như cách bạn thêm cặp thuộc tính/giá trị) – Myster

Các vấn đề liên quan