Ich habe eine List<string>
"sampleList", die enthält
Data1
Data2
Data3...
Die Dateistruktur ist wie
<file>
<name filename="sample"/>
<date modified =" "/>
<info>
<data value="Data1"/>
<data value="Data2"/>
<data value="Data3"/>
</info>
</file>
Ich verwende derzeit XmlDocument, um dies zu tun.
Beispiel:
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");
Wie kann ich mit XDocument dieselbe XML-Struktur erstellen?
c#
xml
linq-to-xml
Thorin Oakenshield
quelle
quelle
Antworten:
Mit LINQ to XML ist dies durch drei Funktionen viel einfacher:
Hier können Sie also einfach Folgendes tun:
Ich habe dieses Codelayout absichtlich verwendet, damit der Code selbst die Struktur des Dokuments widerspiegelt.
Wenn Sie ein Element möchten, das einen Textknoten enthält, können Sie dies konstruieren, indem Sie den Text als weiteres Konstruktorargument übergeben:
quelle
new XElement("description","this is the inner text of the description element.");
(ähnlich wie Sie Attribut / Wert-Paare hinzufügen)new XElement("info", new object[] { new XAttribute("foo", "great"), new XAttribute("bar", "not so great") }.Concat(list.Select(x => new XElement("child", ...))))
Mit den entsprechenden Zeilenumbrüchen sieht das wieder ganz ok aus.Die Verwendung der .Save-Methode bedeutet, dass die Ausgabe eine Stückliste hat, mit der nicht alle Anwendungen zufrieden sind. Wenn Sie keine Stückliste wünschen und sich nicht sicher sind, schlage ich vor, dass Sie dies nicht tun, und übergeben Sie das XDocument an einen Verfasser:
quelle