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>
Abril 8, 2009 at 10:30 pm
Como puedo agregar mas nodos si los datos provienen de texbox??
Este es mi codigo:
public void creaXML()
{
System.Xml.Linq.XDocument miXML = new XDocument(new XDeclaration(“1.0″, “utf-8″, “yes”),
new XComment(“Lista de Personal”),
new XElement(“Personas”,
new XElement(“Cliente”,
new XElement(“Nombre”, txtNombre.Text),
new XElement(“Apellido”, txtApellido.Text),
new XElement(“Edad”, txtEdad.Text.ToString()),
new XElement(“Domicilio”, txtDomicilio.Text))
)
);
miXML.Save(@”c:\miXML.xml”);
}
Abril 8, 2009 at 10:32 pm
Estoy intentando hacer esto pero solo me sobreescribe el XML con los nuevos datos que introduzco en los textbox
public void insertaNodo()
{
XmlDocument xmlmio = new XmlDocument();
xmlmio.Load((@”c:\miXML.xml”));
XmlNode nodo = xmlmio.DocumentElement;
XmlElement uno = xmlmio.CreateElement(“Nombre”);
XmlText txtuno = xmlmio.CreateTextNode(txtNombre.Text);
XmlElement dos = xmlmio.CreateElement(“Apellido”);
XmlText txtdos = xmlmio.CreateTextNode(txtApellido.Text);
XmlElement tres = xmlmio.CreateElement(“Edad”);
XmlText txttres = xmlmio.CreateTextNode(txtEdad.Text);
XmlElement cuatro = xmlmio.CreateElement(“Domicilio”);
XmlText txtcuatro = xmlmio.CreateTextNode(txtDomicilio.Text);
XmlElement node = xmlmio.CreateElement(“Cliente”);
node.AppendChild(uno);
node.LastChild.AppendChild(txtuno);
node.AppendChild(dos);
node.LastChild.AppendChild(txtdos);
node.AppendChild(tres);
node.LastChild.AppendChild(txttres);
node.AppendChild(cuatro);
node.LastChild.AppendChild(txtcuatro);
nodo.AppendChild(node);
}