Bagaimana saya bisa menghasilkan XML yang valid dalam C #?
Itu tergantung skenario. XmlSerializer
tentu saja merupakan salah satu cara dan memiliki keuntungan pemetaan langsung ke model objek. Dalam. NET 3.5 XDocument
,, dll. Juga sangat ramah. Jika ukurannya sangat besar, maka XmlWriter
teman Anda.
Sebagai XDocument
contoh:
Console.WriteLine(
new XElement("Foo",
new XAttribute("Bar", "some & value"),
new XElement("Nested", "data")));
Atau sama dengan XmlDocument
:
XmlDocument doc = new XmlDocument();
XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Foo"));
el.SetAttribute("Bar", "some & value");
el.AppendChild(doc.CreateElement("Nested")).InnerText = "data";
Console.WriteLine(doc.OuterXml);
Jika Anda menulis besar aliran data, maka setiap dari DOM pendekatan (seperti XmlDocument
/ XDocument
, dll) dengan cepat akan mengambil banyak memori. Jadi jika Anda menulis file XML 100 MB dari CSV , Anda dapat mempertimbangkan XmlWriter
; ini lebih primitif (firehose tulis-sekali), tetapi sangat efisien (bayangkan loop besar di sini):
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();
Akhirnya, melalui XmlSerializer
:
[Serializable]
public class Foo
{
[XmlAttribute]
public string Bar { get; set; }
public string Nested { get; set; }
}
...
Foo foo = new Foo
{
Bar = "some & value",
Nested = "data"
};
new XmlSerializer(typeof(Foo)).Serialize(Console.Out, foo);
Ini adalah model yang bagus untuk pemetaan ke kelas, dll .; Namun, itu mungkin berlebihan jika Anda melakukan sesuatu yang sederhana (atau jika XML yang diinginkan tidak benar-benar memiliki korelasi langsung dengan model objek). Masalah lainnya XmlSerializer
adalah bahwa ia tidak suka membuat serial jenis-jenis yang tidak dapat diubah: semuanya harus memiliki pengambil dan penyetel publik (kecuali jika Anda melakukan semuanya sendiri dengan menerapkan IXmlSerializable
, dalam hal ini Anda belum mendapatkan banyak dengan menggunakan XmlSerializer
).
Hal terbaik yang saya coba adalah LINQ to XSD (yang tidak diketahui oleh kebanyakan pengembang). Anda memberikan Skema XSD dan menghasilkan model objek yang sangat diketik lengkap yang dipetakan dengan sempurna (berdasarkan LINQ ke XML) untuk Anda di latar belakang, yang sangat mudah untuk dikerjakan - dan ini memperbarui serta memvalidasi model objek dan XML Anda di waktu sebenarnya. Meskipun masih "Pratinjau", saya belum menemukan bug apa pun dengannya.
Jika Anda memiliki Skema XSD yang terlihat seperti ini:
Maka Anda cukup membangun XML seperti ini:
Atau cukup memuat XML dari file seperti ini:
Atau simpan seperti ini:
rootElement.Untyped
juga menghasilkan elemen dalam bentuk XElement (dari LINQ ke XML).sumber
RootElement
sumber
XmlWriter adalah cara tercepat untuk menulis XML yang bagus. XDocument, XMLDocument dan beberapa yang lainnya juga berfungsi dengan baik, tetapi tidak dioptimalkan untuk menulis XML. Jika Anda ingin menulis XML secepat mungkin, Anda harus menggunakan XmlWriter.
sumber
Di masa lalu saya telah membuat Skema XML saya, kemudian menggunakan alat untuk menghasilkan kelas C # yang akan bersambung ke skema itu. Alat Definisi Skema XML adalah salah satu contohnya
http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx
sumber
Saya pikir sumber daya ini cukup untuk XML save / load moderat: Baca / Tulis XML menggunakan C # .
Tugas saya adalah menyimpan notasi musik. Saya memilih XML, karena saya kira . NET telah cukup matang untuk memungkinkan solusi yang mudah untuk tugas tersebut. Saya benar :)
Ini adalah prototipe file lagu saya:
Itu bisa diselesaikan dengan mudah:
Untuk Simpan ke File:
Untuk memuat file:
sumber
Untuk hal-hal sederhana, saya hanya menggunakan kelas XmlDocument / XmlNode / XmlAttribute dan XmlDocument DOM yang ditemukan di System.XML.
Ini menghasilkan XML untuk saya, saya hanya perlu menghubungkan beberapa item bersama.
Namun, pada hal-hal yang lebih besar, saya menggunakan serialisasi XML.
sumber
Untuk kasus sederhana, saya juga menyarankan melihat XmlOutput antarmuka yang fasih untuk membangun Xml.
XmlOutput sangat bagus untuk pembuatan Xml sederhana dengan kode yang dapat dibaca dan dikelola, sambil menghasilkan Xml yang valid. The posting asli memiliki beberapa contoh besar.
sumber
Seperti di atas.
Saya menggunakan stringbuilder.append ().
Sangat mudah, dan Anda kemudian dapat melakukan xmldocument.load (objek strinbuilder sebagai parameter).
Anda mungkin akan menemukan diri Anda menggunakan string.concat dalam parameter append, tetapi ini adalah pendekatan yang sangat mudah.
sumber