Insertando nodos en un XML

Febrero 20, 2008

Tratar XML con el framework .NET 2.0 tiene cierto grado de complejidad debido a que el api System.Xml es demasiado granular en funcionalidad. En días recientes nos enfretamos a la siguiente situación. ¿Cómo agregar subnodos a un nodo dentro de un XML ya existente? Por ejemplo,tenemos el siguiente XML:
 

<?xml version=”1.0″ encoding=”UTF-8″ ?>
 <numbers>
  <primes>
   <prime>
    <length>1</length>
    <value>3</value>
   </prime><prime>
   <length>2</length>
    <value>37</value>
   </prime>
   <prime>
    <length>3</length>
    <value>479</value>
   </prime>
  </primes>
</numbers>


Y queremos agregar subnodos “prime” a nodo “primes”. Asumiendo que tenemos el XML en un objeto DOM (XmlDocument) sería de la siguiente manera:

//Selección del Xpath donde queremos insertar los subnodos
XmlNode nodo = objXml.SelectSingleNode(“/numbers/primes”);
//Creación del subnodo
XmlElement elmNodo = objLlave.CreateElement(“length”);
XmlText elmTextoNodo = objLlave.CreateTextNode(“4″);
XmlElement elmValor = objLlave.CreateElement(“value”);
XmlText elmTextoValor = objLlave.CreateTextNode(“1019″);
//Creamos el subnodo
XmlElement elmPrime = objLlave.CreateElement(“prime”);
//Agregamos los valores al subnodo
elmPrime .AppendChild(elmNodo);
elmPrime .LastChild.AppendChild(elmTextoNodo);
elmPrime .AppendChild(elmValor);
elmPrime .LastChild.AppendChild(elmTextoValor);
//Agregamos el subnodo al nodo del xml
nodo.AppendChild(elmPrime);

Con lo cual el nuevo XML quedaría de la siguiente manera: 

<?xml version=”1.0″ encoding=”UTF-8″ ?>
 <numbers>
  <primes>
   <prime>
    <length>1</length>
    <value>3</value>
   </prime>
<prime>
    <length>2</length>
    <value>37</value>
   </prime>
   <prime>
    <length>3</length>
    <value>479</value>
   </prime>
   <prime>
    <length>4</length>
    <value>1019</value>
   </prime>
  </primes>
 </numbers>