Imagen

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.


CARTA PORTE V3.1

ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03


.

Como selecciono un nodo en el XML ????

La factura esta basada en XML, independiente del lenguaje de programacion todos debemos saber acerca de esta tecnologia
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
Cerrado
Halcon Divino
Mensajes: 164
Registrado: Vie Nov 25, 2011 3:12 pm

Como selecciono un nodo en el XML ????

Mensaje por Halcon Divino »

Que t al colegas
Lo que requiero es seleccionar el NODO Complemento del XML
Pero no puedo hacerlo , este es el codigo que estoy usando en c# para seleccionar el nodo.
Me da null la variable NodoComplemento .... Que estoy haciendo mal ???????
Saludos


string ArchivoXML = @"C:\CFDI_XYZ.XML";
XmlDocument oXml = new XmlDocument();
oXml.Load(ArchivoXML);

//Obtenemos el nodo raiz del documento.
XmlNode nodoRaiz = oXml.DocumentElement;

XmlNamespaceManager nsmgr = new XmlNamespaceManager(oXml.NameTable);
nsmgr.AddNamespace("cfdi", "www.sat.gob.mx/cfd/3");
XmlNode NodoComplemento = oXml.SelectSingleNode("//cfdi:Comprobante/cfdi:Complemento", nsmgr);
Saludos
Halcón Divino

Monterrey
Nuevo León
México
alf
Mensajes: 5
Registrado: Mar Oct 16, 2012 3:25 pm

Re: Como selecciono un nodo en el XML ????

Mensaje por alf »

No se que quieras hacer, pero yo hago lo siguiente:

XmlDocument xmlFactura = new XmlDocument();
xmlFactura.Load(Server.MapPath("../xml_facturas" + "/" + strFact));

XmlNodeList xmlComprobante = xmlFactura.GetElementsByTagName("cfdi:Comprobante");

y xmlComprobante[0] es el nodo comprobante...

No se si esto te ayude...
Halcon Divino
Mensajes: 164
Registrado: Vie Nov 25, 2011 3:12 pm

Re: Como selecciono un nodo en el XML ????

Mensaje por Halcon Divino »

Alf
Gracias por tu respuesta
El """.GetElementsByTagName""" ya lo he usado para extractar datos puntuales del XML y me ha funcionado correctamente

Requiero seleccionar el nodo COMPLEMENTO para posteriormente insertar otro nodo .... pero sino puedo hacer el SELECTNODE menos voy a poder insertar el nodo que quiero.

Si alguien me podría apoyar se los agradecería

Saludos
Halcón Divino
Monterrey, N.L. Mex.

.
.
Saludos
Halcón Divino

Monterrey
Nuevo León
México
alf
Mensajes: 5
Registrado: Mar Oct 16, 2012 3:25 pm

Re: Como selecciono un nodo en el XML ????

Mensaje por alf »

Pues creas el nodo que vas a agregar


XmlDocument xmlFactura = new XmlDocument();
xmlFactura.Load(Server.MapPath("../xml_facturas" + "/" + strFact));

XmlNodeList xmlComprobante = xmlFactura.GetElementsByTagName("cfdi:Comprobante");

//Creas el nodo hijo
XmlNode nodoHijo = xmlFactura.CreateElement("Hijo");
nodoHijo.InnerText = "Este es el texto del hijo";

//Y lo agregas al nodo padre
xmlComprobante[0].AppendChild(nodoHijo);


Y listo... ya tienes un nodo hijo dentro del nodo padre...

Pero si estás creando la factura electrónica, te recomendaría usar serializacion, usando el schema que ya da el SAT y el XML se genera automáticamente sin necesidad de estar creando nodos...
alf
Mensajes: 5
Registrado: Mar Oct 16, 2012 3:25 pm

Re: Como selecciono un nodo en el XML ????

Mensaje por alf »

A lo mejor no es lo que quieres pero así puedes generar el CFDI 3.2 (antes de Timbrarlo) usando Visual Studio 2010 con serialización:

1. Bajas el esquema del CFDI 3.2 de la pagina del SAT, el cfdv32.xsd
2. Abres un ventana de Visual Studio Command Prompt (2010)

3. Te vas al directorio donde pusiste el archivo xsd y ejecutas el siguiente comando:
D:\Projects\dll\Xslt>xsd cfdv32.xsd /classes
4. Y te genera un archivo llamado cfdv32.cs, que es la clase Comprobante
5. Esa clase la agregas a tu proyecto, y le agregas lo siguiente (yo lo puse depués de que los atributos son declarados):
[XmlAttribute(Namespace = XmlSchema.InstanceNamespace)]
public string schemaLocation = "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd";

6. Y ahora si, creas una instancia de la clase Comprobante y la llenas con los datos:

Comprobante objCompXSD = new Comprobante();
objCompXSD.version = "3.2";
objCompXSD.fecha = DateTime.Now;
....

7. Y ahora hace la serializacion

// Creas los namespaces requeridos
XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlNameSpace.Add("cfdi", "http://www.sat.gob.mx/cfd/3");

// Creas una instancia de XMLSerializer con el tipo de dato Comprobante
XmlSerializer xmlSerialize = new XmlSerializer(typeof(Comprobante));

// Creas una instancia de XmlTextWriter donde se va a guardar el resultado de la serialización
XmlTextWriter xmlTextWriter = new XmlTextWriter(@"factura.xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;

// Y serializas...
xmlSerialize.Serialize(xmlTextWriter, objCompXSD, xmlNameSpace);
xmlTextWriter.Close();


8. Y listo, el .NET te va a generar el XML con el formato que requiere el SAT (antes de timbrar)...
9. Y con este XML puedes generar la cadena original usando Transformación (cadenaoriginal_3_2.xslt) para finalmente generar el sello antes de mandarla timbrar con el PAC.
jerryeagle
Mensajes: 19
Registrado: Vie Mar 16, 2012 6:14 am

Re: Como selecciono un nodo en el XML ????

Mensaje por jerryeagle »

No sabia si responder a un post de hace tanto tiempo pero... con LinQ es facilísimo:
Para seleccionar el Nodo Complemento (Raiz):
Con VB

Dim xComprobante As XElement = XDocument.Load("Archivo.xml").Root

Para Agregar un nodo
Dim xEmisor As XElement = <Emisor
rfc="AUBG780220IQZ"
nombre="NOMBRE O RAZON SOCIAL" />
xComprobante.Add(xEmisor)

Para Seleccionar el Nodo Emisor
Dim NodoEmisor As XElement = xComprobante.Root.<Emisor>

etc...
rudolf cruz
Mensajes: 5
Registrado: Mar Ene 14, 2014 12:21 pm

Re: Como selecciono un nodo en el XML ????

Mensaje por rudolf cruz »

alf escribió:A lo mejor no es lo que quieres pero así puedes generar el CFDI 3.2 (antes de Timbrarlo) usando Visual Studio 2010 con serialización:

1. Bajas el esquema del CFDI 3.2 de la pagina del SAT, el cfdv32.xsd
2. Abres un ventana de Visual Studio Command Prompt (2010)

3. Te vas al directorio donde pusiste el archivo xsd y ejecutas el siguiente comando:
D:\Projects\dll\Xslt>xsd cfdv32.xsd /classes
4. Y te genera un archivo llamado cfdv32.cs, que es la clase Comprobante
5. Esa clase la agregas a tu proyecto, y le agregas lo siguiente (yo lo puse depués de que los atributos son declarados):
[XmlAttribute(Namespace = XmlSchema.InstanceNamespace)]
public string schemaLocation = "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd";

6. Y ahora si, creas una instancia de la clase Comprobante y la llenas con los datos:

Comprobante objCompXSD = new Comprobante();
objCompXSD.version = "3.2";
objCompXSD.fecha = DateTime.Now;
....

7. Y ahora hace la serializacion

// Creas los namespaces requeridos
XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlNameSpace.Add("cfdi", "http://www.sat.gob.mx/cfd/3");

// Creas una instancia de XMLSerializer con el tipo de dato Comprobante
XmlSerializer xmlSerialize = new XmlSerializer(typeof(Comprobante));

// Creas una instancia de XmlTextWriter donde se va a guardar el resultado de la serialización
XmlTextWriter xmlTextWriter = new XmlTextWriter(@"factura.xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;

// Y serializas...
xmlSerialize.Serialize(xmlTextWriter, objCompXSD, xmlNameSpace);
xmlTextWriter.Close();


8. Y listo, el .NET te va a generar el XML con el formato que requiere el SAT (antes de timbrar)...
9. Y con este XML puedes generar la cadena original usando Transformación (cadenaoriginal_3_2.xslt) para finalmente generar el sello antes de mandarla timbrar con el PAC.
hola compañero puedes detallar bien los pasos del 3 al 5 porfavor par ver como ejecutas el comando que mencionas para que genere la clase porfavor, Saludos...
Cerrado