Anteriormente vimos como leer datos y escribir datos en un archivo XML. Ahora vamos a mostrar como insertar un nodo o registro en cualquier lugar del árbol de nodos del archivo XML.
Aunque comenzaremos viendo como insertar un nodo al final de un archivo, que es la operación más habitual, luego veremos como insertar un registro de forma más controlada.
Dado que las clases que vamos a utilizar para este ejemplo ya fuerón explicadas anteriormente recomiendo a todo el mundo que lean en primer lugar los artículos precedentes. Además el modelo de archivo XML es el mismo que en los ejemplos anteriores.
En primer lugar crearemos el nodo que deseamos insertar.
private XmlNode CrearNodoXml(string id, string nom, string ape, string nss, string fijo, string mvl)
{
//Creamos el nodo que deseamos insertar.
XmlElement empleado = documento.CreateElement("empleado");
//Creamos el elemento idEmpleado.
XmlElement idEmpleado = documento.CreateElement("idEmpleado");
idEmpleado.InnerText = id;
empleado.AppendChild(idEmpleado);
//Creamos el elemento nombre.
XmlElement nombre = documento.CreateElement("nombre");
nombre.InnerText = nom;
empleado.AppendChild(nombre);
//Creamos el elemento apellidos.
XmlElement apellidos = documento.CreateElement("apellidos");
apellidos.InnerText = ape;
empleado.AppendChild(apellidos);
//Creamos el elemento numeroSS.
XmlElement numeroSS = documento.CreateElement("numeroSS");
numeroSS.InnerText = nss;
empleado.AppendChild(numeroSS);
//Creamos el elemento telefonos.
XmlElement telefonos = documento.CreateElement("telefonos");
empleado.AppendChild(telefonos);
//Creamos el elemento fijo.
XmlElement nodoFijo = documento.CreateElement("fijo");
nodoFijo.InnerText = fijo;
telefonos.AppendChild(nodoFijo);
//Creamos el elemento movil.
XmlElement movil = documento.CreateElement("movil");
movil.InnerText = mvl;
telefonos.AppendChild(movil);
return empleado;
}
Una vez que tenemos el nodo creado procedemos a insertar un registro al final del documento XML.
private void InsertarXml()
{
//Cargamos el documento XML.
documento = new XmlDocument();
documento.Load(ruta);
//Creamos el nodo que deseamos insertar.
XmlNode empleado = this.CrearNodoXml("4", "Gerardo", "Montaz Soaz", "444-444-444-444", "893434220", "609334209");
//Obtenemos el nodo raiz del documento.
XmlNode nodoRaiz = documento.DocumentElement;
//Insertamos el nodo empleado al final del archivo
nodoRaiz.InsertAfter(empleado, nodoRaiz.LastChild); //***
documento.Save(ruta);
}
Ahora nos fijamos en la función anterior justo en la linea que esta marcada con //*** . Esta linea es la que inserta el nodo precisamente a
continuación del último nodo del documento XML. Como hemos comentado antes esta es la operación más usual pero existen más opciones.
- Insertar antes del último nodo del documento.
nodoRaiz.InsertBefore(empleado, nodoRaiz.LastChild);
- Insertar después del primer nodo del documento.
nodoRaiz.InsertAfter(empleado, nodoRaiz.FirstChild);
- Insertar antes del primer nodo del documento.
nodoRaiz.InsertBefore(empleado, nodoRaiz.FirstChild);
- Insertar en un lugar determinado del documento.
nodoRaiz.InsertAfter(empleado, documento.SelectNodes("empleados/empleado").Item(2));
En este último caso hay que tener en cuenta que el método Item() accede a la colección de nodos del documento, y esta colección tiene
un índice inicial igual acero. En el ejemplo, hemos insertado el nodo después del elemento 2 de la colección, pero podíamos haberlo insertado
antes con InsertBefore().