domingo, 13 de septiembre de 2009

Construir un XML con XMLDocument.

Lo primero declaramos nuestro flamante objeto XmlDocument que nos permite hacer todo tipo de virguerías.
XmlDocument peticion = new XmlDocument();


Lo siguiente es cargar en él la estructura o el xml entero (en este caso muy simple para no liarnos más)
// Introduciendo la declaración y la estructura manualmente
peticion.LoadXml("<?xml version='1.0' encoding='UTF-8'?>" +
"<peticion>" +
"<cuerpo>"+
"<id></id>"+
"<secreto></secreto>"+
"</cuerpo>"+
"</peticion>");

Sencillo, no? Pero muy poco útil obviamente porque perdemos toda la potencia de poder crear los XML de forma dinámica.

El siguiente método es mucho más complejo pero a la par que nos permite el control total de nuestra construcción:
XmlDocument peticion = new XmlDocument();
XmlNode xmlnode;
XmlDeclaration xmldeclaracion;

// Creo la línea de declaración de dos formas diferentes.
// Esta por métodos de Xdocument
xmlnode = peticion.CreateNode(XmlNodeType.XmlDeclaration, string.Empty, string.Empty);
peticion.AppendChild(xmlnode);

// Le indico el encoding
xmldeclaracion = (XmlDeclaration) peticion.FirstChild;
xmldeclaracion.Encoding
= "UTF-8";

// Añado el raiz peticion
xmlnode = peticion.CreateNode(XmlNodeType.Element, "peticion", "");
peticion.AppendChild(xmlnode);


// Le añado el nodo cuerpo
XmlNode nodoPeticion = peticion.DocumentElement;
XmlNode nodoCuerpo
= peticion.CreateNode(XmlNodeType.Element, "cuerpo", null);
nodoPeticion.AppendChild(nodoCuerpo);

// Le añado los elementos id y secreto y le doy valores.
XmlElement elementoId = peticion.CreateElement("id");
XmlElement elementoSecreto
= peticion.CreateElement("secreto");

nodoCuerpo.AppendChild(elementoId);
nodoCuerpo.AppendChild(elementoSecreto);

Y con esto obtenemos el mismo XML que con el ejemplo anterior.

Más adelante, os contaré como manipular los valores en estos elementos.

3 comentarios:

Anónimo dijo...

Excelente aporte!!

Juan Quijano dijo...

Me alegro que te sea de utilidad.

Anónimo dijo...

Buenos días,

Tengo un ejemplo que crea un XML mediante XMLDocument y lo guarda en una carpeta.

Hasta aquí bien, pero como abriría el XML desde c# para que el usuario lo vea directamente?

Gracias