Agregar Addenda a archivo XML con C# y VB

Hola tyros!, yo de nuevo.

En esta ocasión voy a mostrarles como agregar una addenda sencilla a nuestro archivo XML. Comencemos...

Tengo el siguiente archivo XML:
XML Con Addenda


Lo quiero así:
XML Con Addenda


Código C#

string xml = "ruta_archivo.xml";
XmlDocument doc = new XmlDocument();
doc.Load(xml);//Leer el XML
XmlElement addenda = doc.CreateElement("cfdi:Addenda", "http://www.sat.gob.mx/cfd/3");
XmlElement infoAdicional = doc.CreateElement("cfdi:InfoAdicional", "http://www.sat.gob.mx/cfd/3");
infoAdicional.SetAttribute("OrdenCompra", "1234");
addenda.AppendChild(infoAdicional);
doc.DocumentElement.AppendChild(addenda);
doc.Save(xml);//Guardar XML


Código VB

Dim xml As String = "ruta_archivo.xml"
Dim doc As New XmlDocument()
doc.Load(xml) ''Leer el XML
Dim addenda As XmlElement = doc.CreateElement("cfdi:Addenda", "http://www.sat.gob.mx/cfd/3")
Dim infoAdicional As XmlElement = doc.CreateElement("cfdi:InfoAdicional", "http://www.sat.gob.mx/cfd/3")
infoAdicional.SetAttribute("OrdenCompra", "1234")
addenda.AppendChild(infoAdicional)
doc.DocumentElement.AppendChild(addenda)
doc.Save(xml) ''Guardar XML


No olvides agregar la referencia a "System.Xml"

Hasta pronto!!

5 comentarios:

  1. Me funciono casi todo excepto porque yo intento agrega una namespace y no me lo respeta, simplemente omite en la creacion del XML el valor de xsi: caso curioso porque el namespace de xmlns si lo coloca me imagino que es por ser el default

    XmlElement propiedadesAddenda = doc.CreateElement("sp:SP", "http://www.sat.gob.mx/cfd/3");
    propiedadesAddenda.SetAttribute("xmlns:sp", "http://solucion.com/cfd");
    propiedadesAddenda.SetAttribute("xsi:schemaLocation", "http://solucion.com/cfd/ https://solucion.com/addenda/ar.xsd");

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Intenta de esa manera:
      XmlAttribute schemaLocation = xmlDocument.CreateAttribute("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
      schemaLocation.Value = "http://solucion.com/cfd/ https://solucion.com/addenda/ar.xsd";
      propiedadesAddenda.SetAttributeNode(schemaLocation);

      Eliminar
  2. Hay algún cambio para la factura 4.0?

    ResponderEliminar
    Respuestas
    1. "http://www.sat.gob.mx/cfd/3"); esta parte cambia por "http://www.sat.gob.mx/cfd/4");

      Eliminar