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);

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 ????
-
- Mensajes: 164
- Registrado: Vie Nov 25, 2011 3:12 pm
Como selecciono un nodo en el XML ????
Saludos
Halcón Divino
Monterrey
Nuevo León
México
Halcón Divino
Monterrey
Nuevo León
México
-
- Mensajes: 5
- Registrado: Mar Oct 16, 2012 3:25 pm
Re: Como selecciono un nodo en el XML ????
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...
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...
-
- Mensajes: 164
- Registrado: Vie Nov 25, 2011 3:12 pm
Re: Como selecciono un nodo en el XML ????
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.
.
.
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
Halcón Divino
Monterrey
Nuevo León
México
-
- Mensajes: 5
- Registrado: Mar Oct 16, 2012 3:25 pm
Re: Como selecciono un nodo en el XML ????
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...
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...
-
- Mensajes: 5
- Registrado: Mar Oct 16, 2012 3:25 pm
Re: Como selecciono un nodo en el XML ????
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.
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.
-
- Mensajes: 19
- Registrado: Vie Mar 16, 2012 6:14 am
Re: Como selecciono un nodo en el XML ????
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...
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...
-
- Mensajes: 5
- Registrado: Mar Ene 14, 2014 12:21 pm
Re: Como selecciono un nodo en el XML ????
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...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.