Создание XML-файла с помощью XDocument в C#



у меня есть List<string> "sampleList", который содержит



Data1
Data2
Data3...


структура файла



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


в настоящее время я использую XmlDocument для этого.



пример:



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


как я могу создать ту же структуру XML с помощью XDocument?

874   1  

1 ответ:

LINQ to XML позволяет сделать это намного проще, с помощью трех функций:

  • вы можете построить объект, не зная документа, частью которого он является
  • вы можете построить объект и обеспечить детям в качестве аргументов
  • если аргумент повторяется, он будет повторяться над

Так что здесь вы можете просто сделать:

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");
}

я использовал этот макет кода намеренно, чтобы сделать сам код отражает структуру документ.

Если вам нужен элемент, содержащий текстовый узел, вы можете построить его, просто передав текст в качестве другого аргумента конструктора:

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

Comments

    Ничего не найдено.