¿Cómo puedo generar XML válido en C #?
Depende del escenario. XmlSerializer
Sin duda es una forma y tiene la ventaja de mapear directamente a un modelo de objeto. En .NET 3.5, XDocument
etc. también son muy amigables. Si el tamaño es muy grande, entonces XmlWriter
es tu amigo.
Por un XDocument
ejemplo:
Console.WriteLine(
new XElement("Foo",
new XAttribute("Bar", "some & value"),
new XElement("Nested", "data")));
O lo mismo con 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);
Si está escribiendo una gran secuencia de datos, cualquiera de los enfoques DOM (como XmlDocument
/ XDocument
, etc.) ocupará rápidamente mucha memoria. Entonces, si está escribiendo un archivo XML de 100 MB desde CSV , puede considerar XmlWriter
; Esto es más primitivo (una manguera de incendios de escritura única), pero muy eficiente (imagine un gran bucle aquí):
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();
Finalmente, a través de 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);
Este es un buen modelo para mapear a clases, etc .; sin embargo, podría ser excesivo si está haciendo algo simple (o si el XML deseado realmente no tiene una correlación directa con el modelo de objetos). Otro problema XmlSerializer
es que no le gusta serializar los tipos inmutables: todo debe tener un captador y configurador público (a menos que lo haga todo usted mismo mediante la implementación IXmlSerializable
, en cuyo caso no ha ganado mucho al usarlo XmlSerializer
).
Lo mejor que he probado es LINQ to XSD (que la mayoría de los desarrolladores desconocen). Le da un esquema XSD y genera un modelo de objeto completo fuertemente tipado perfectamente mapeado (basado en LINQ to XML) para usted en segundo plano, que es realmente fácil de trabajar, y actualiza y valida su modelo de objeto y XML en tiempo real. Si bien todavía es "Vista previa", no he encontrado ningún error con él.
Si tiene un esquema XSD que se ve así:
Entonces puedes simplemente crear XML de esta manera:
O simplemente cargue un XML desde un archivo como este:
O guárdelo así:
rootElement.Untyped
también produce el elemento en forma de XElement (de LINQ a XML).fuente
RootElement
fuente
XmlWriter es la forma más rápida de escribir un buen XML. XDocument, XMLDocument y algunos otros también funcionan bien, pero no están optimizados para escribir XML. Si desea escribir el XML lo más rápido posible, definitivamente debe usar XmlWriter.
fuente
En el pasado, creé mi esquema XML, luego utilicé una herramienta para generar clases de C # que se serializarán en ese esquema. La herramienta de definición de esquemas XML es un ejemplo
http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx
fuente
Creo que este recurso debería ser suficiente para guardar / cargar XML moderadamente: leer / escribir XML usando C # .
Mi tarea era almacenar la notación musical. Elijo XML, porque supongo que .NET ha madurado lo suficiente como para permitir una solución fácil para la tarea. Yo tenía razón :)
Este es mi prototipo de archivo de canción:
Eso se puede resolver con bastante facilidad:
Para guardar en archivo:
Para cargar archivo:
fuente
Para cosas simples, solo uso las clases XmlDocument / XmlNode / XmlAttribute y XmlDocument DOM que se encuentran en System.XML.
Genera el XML para mí, solo necesito vincular algunos elementos.
Sin embargo, en cosas más grandes, uso la serialización XML.
fuente
Para casos simples, también sugeriría buscar en XmlOutput una interfaz fluida para construir Xml.
XmlOutput es ideal para la creación simple de Xml con código legible y mantenible, mientras genera Xml válido. La publicación original tiene algunos excelentes ejemplos.
fuente
Como anteriormente.
Yo uso stringbuilder.append ().
Muy sencillo, y luego puede hacer xmldocument.load (objeto strinbuilder como parámetro).
Probablemente se encontrará utilizando string.concat dentro del parámetro append, pero este es un enfoque muy sencillo.
fuente