Visual Basic.NET - Leer XML CFDI y Anadir un nuevo nodo Addenda con VB.NET 2010

   
Vista:

Leer XML CFDI y Anadir un nuevo nodo Addenda con VB.NET 2010

Publicado por NetFcruz (6 intervenciones) el 20/09/2012 17:31:34
Hola amigos eh estado leyendo y practicando vb.net 2010 ya que me gusta su forma de programar, pero me eh topado con algo dificil la verdad que soy medio apenas en este lenguaje.
Tengo un XML firmado y timbrado es decir correcto. A este XML LO LEO mediante una variable y lo cargo en un texbox, y una vez leido quiero agregar un nodo nuevo el de addenda ya que no necesita forzozamente llevarlo pero para algunas si como soriana, lo que quiero es tomar el xml generado y agregarle el nuevo nodo, tendria que leer en una variable y encontrar el ultimo cierre </Complemento> por ejemplo antes de cerrar la ultima </> para anadir el nuevo nodo, como podria ser el code para encontrar el </Complemento> y reemplazar esa palabra + el nuevo nodo?.
Podrian auxiliarme yevo un mes en esto y no eh podido exactamente solucionarle.
Espero me explique.
Saludos amigos...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Leer XML CFDI y Anadir un nuevo nodo Addenda con VB.NET 2010

Publicado por NetFcruz (6 intervenciones) el 20/09/2012 18:20:14
Por favor i alguien tiene conocimientos sobre lo mencionado podria auxiliarme, es buenisimo compartir code y muchisimas ideas, pondre el code como lo tengo:
Le pondre el code que lee mi XML Cargado timbrado, leyendolo en un texbox.
Código:
Sub SubLeerArchivoXml()

'Declaro variable para leer archivo Xml
Dim reader As XmlTextReader = New XmlTextReader("c:\Addenda\Archivos\addenda.xml")

'Ciclo de lectura
Do While (reader.Read())
Select Case reader.NodeType
Case XmlNodeType.Element 'Mostrar comienzo del elemento.
txtContenido.Text += "<" + reader.Name
If reader.HasAttributes Then 'If attributes exist
While reader.MoveToNextAttribute()
'Mostrar nombre y valor del atributo.
txtContenido.Text += Space(1) + reader.Name + "=" + reader.Value
End While
End If
txtContenido.Text += ">" + vbCrLf
Case XmlNodeType.Text 'Mostrar el texto de cada elemento.
txtContenido.Text += reader.Value
Case XmlNodeType.EndElement 'Mostrar final del elemento.
txtContenido.Text += " txtContenido.Text += ">" + vbCrLf
End Select
Loop



'Cierra el Archivo
reader.Close()


End Sub


Esto es para crear la addenda mediante un formulario:
Código:

'Declaro Subrutinas globales
Sub SubCrearArchivoXml()

'Declaro variable array para los libros
Dim objLibros As New ArrayList
Dim objLibro As New stcLibro
Dim objAddenda As New stcAddenda
Dim objAddendas As New ArrayList


'Variable para el Archivo Xlml
Dim myXmlTextWriter As XmlTextWriter = New XmlTextWriter("c:\Addenda\Archivos\addenda2.xml", System.Text.Encoding.UTF8)

'Anado objAddenda
'Anado unas caracteristicas de Addenda
objAddenda.TipoAddenda = CBOTADENDA.Text
objAddenda.Concepto = CBOCONCEPTO.Text
objAddenda.NumTienda = TXTUNEG.Text
objAddenda.NumProveedor = TXTNPROV.Text
objAddenda.FolioRef = TXTFOREF.Text

'AGREGO ADDENDA A COLECCION
objAddendas.Add(objAddenda)

'Añado algunos libros
objLibro.strTitulo = "Don Quijote de la Mancha"
objLibro.strAutor.strNombre = "Miguel"
objLibro.strAutor.strApellido = "de Cervantes Saavedra"
objLibro.sinPrecio = 34.5

'Agrego a la Colección
'objLibros.Add(objLibro)

objLibro.strTitulo = "Los de Abajo"
objLibro.strAutor.strNombre = "Mariano"
objLibro.strAutor.strApellido = "Azuela"
objLibro.sinPrecio = 28.5

'Agrego a la Colección
'objLibros.Add(objLibro)

objLibro.strTitulo = "Como agua para chocolate"
objLibro.strAutor.strNombre = "Laura"
objLibro.strAutor.strApellido = "Esquivel"
objLibro.sinPrecio = 34.5

'Agrego a la Colección
'objLibros.Add(objLibro)


'Formatea indentado el archivo
myXmlTextWriter.Formatting = System.Xml.Formatting.Indented

'Si escribe la inicializacion del Archivo
myXmlTextWriter.WriteStartDocument(True)

'Escribe un Comentario
' myXmlTextWriter.WriteComment("Esto es Fragmento de Addenda")

'Crear el elemento principal del documento
myXmlTextWriter.WriteStartElement("Complemento")
myXmlTextWriter.WriteAttributeString("id", "identificador")


'---------------------------ADDENDA-------------------------------

'Ciclo para incluir los elementos de la colección
For Each oAddenda As stcAddenda In objAddendas

'Escribe el inicio del elemento cfdi: Addenda
myXmlTextWriter.WriteStartElement("Addenda")


'Crear un elemento llamado 'TipoAddenda' con un nodo de texto
myXmlTextWriter.WriteStartElement("TipoAddenda")

'Escribe el Titulo
' myXmlTextWriter.WriteString(oAddenda.TipoAddenda)

'Crear un elemento llamado 'cfdi:Concepto' con un nodo de texto
' y cerrarlo en una línea.
myXmlTextWriter.WriteElementString("TipoAddenda", oAddenda.TipoAddenda)


'Cierra el elemento.
myXmlTextWriter.WriteEndElement()

'Crear un elemento llamado 'Concepto'.
myXmlTextWriter.WriteStartElement("Concepto")

'Crear un elemento llamado 'cfdi:Concepto' con un nodo de texto
' y cerrarlo en una línea.
myXmlTextWriter.WriteElementString("Concepto", oAddenda.Concepto)

'Crear un elemento llamado 'last-name' con un nodo de texto.
'myXmlTextWriter.WriteElementString("cfdi:Concepto", oAddenda.Concepto)

'Crear un elemento llamado 'UProveedor'.
myXmlTextWriter.WriteStartElement("NumProveedor")

'Crear un elemento llamado 'cfdi:Concepto' con un nodo de texto
' y cerrarlo en una línea.
myXmlTextWriter.WriteElementString("NumProveedor", oAddenda.NumProveedor)

'Crear un elemento llamado 'UProveedor'.
myXmlTextWriter.WriteStartElement("NumTienda")

'Crear un elemento llamado 'cfdi:NumTienda' con un nodo de texto
' y cerrarlo en una línea.
myXmlTextWriter.WriteElementString("NumTienda", oAddenda.NumTienda)

'Crear un elemento llamado 'UProveedor'.
myXmlTextWriter.WriteStartElement("FolioRef")

'Crear un elemento llamado 'cfdi:Concepto' con un nodo de texto
' y cerrarlo en una línea.
myXmlTextWriter.WriteElementString("FolioRef", oAddenda.FolioRef)

'Cerrar el elemento primario.
myXmlTextWriter.WriteEndElement()


'Cerrar el elemento primario.
myXmlTextWriter.WriteEndElement()

'Cerra el 3

myXmlTextWriter.WriteEndElement()

'Cerrar el 4
myXmlTextWriter.WriteEndElement()

'Cerrar el 5

' myXmlTextWriter.WriteEndElement()

Next

'Forza grabación a Disco
myXmlTextWriter.Flush()

'Cierra el Archivo
myXmlTextWriter.Close()

End Sub


Y para Leer el xml addenda es igual al de el primero de el xml cargado

Entonces si ya tengo creado el nodo en un xml como hago una vez creado antes de crearse a xml se agrege al xml leido.
Podrian auxiliarme?

Eh leido ke mediante dataset pero es cuando eh creado el XML yo, pero en este caso es uno generado de otro lado y yo lo leo y en este quiero agregarle el nodo que creo <Addenda>.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Leer XML CFDI y Anadir un nuevo nodo Addenda con VB.NET 2010

Publicado por Cronos379 (1 intervención) el 18/08/2015 08:02:20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim MIDOC As XmlDocument
MIDOC = New XmlDocument
MIDOC.Load(Ruta) 'lees el xml existe
Dim Tmp() As String = Ruta.Split("\")
Dim CT As Integer = Tmp.Length
CT = CT - 1
MIDOC.DocumentElement.LastChild.RemoveAll()
Dim Nombre As String = Tmp(CT)
Dim V01 As XmlElement = MIDOC.CreateElement("cfdi:Addenda")
V01.LocalName.Remove(1, 3)
Dim V02 As XmlElement = MIDOC.CreateElement("AddendaCTS")
Dim V03 As XmlElement = MIDOC.CreateElement("cupon")
' Dim V04 As XmlElement
MIDOC.DocumentElement.LastChild.AppendChild(V02)
V02.AppendChild(V03)
V03.InnerText = TCupon.Text
T01.Text &= "\" & Nombre
MIDOC.Save(T01.Text) 'Guardas un nuevo archivo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Leer XML CFDI y Anadir un nuevo nodo Addenda con VB.NET 2010

Publicado por Francisco FranciscoCtz@Gmail.com (1 intervención) el 03/07/2014 19:55:24
Hola buen día, llego tarde para responder este post, pero según entendí tú puedes leer la factura XML, mi duda es, ¿cómo es que leíste la factura? Yo trato de leerla pero no puedo extraer los datos de los nodos, me podrías ayudar? lo único que necesito es extraer algunos datos de varios nodos de un CFDI timbrado, no me importa si hay que validar si está o no timbrado, lo único que quiero es extraer la información para después almacenarla en una base de datos, si me pudieras ayudar te agradecería demasiado, mi correo es: FranciscoCtz@Gmail.com por allí podemos hablar y estar en contacto.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Leer XML CFDI y Anadir un nuevo nodo Addenda con VB.NET 2010

Publicado por FCC ingfc@outlook.com (2 intervenciones) el 10/12/2015 17:02:35
Mira según lei, ya tienes el xml cfdi timbrado, lo que quieres hacer es leerlo en VB.Net y una vez leido insertar la addenda soriana como ejemplo, ya que es lo mismo para las demas, y una vez leido el nodo addenda insertarlo como tla "nodo" y grabarlo con este nuevo nodo de información y sin modificar el cfdi o cadena.

Te pongo el siguiente código usando un ejemplo, espero que les sirva.

Importa esta libreria

1
Imports System.Xml

Después variable
1
Dim modStrFileName As String

1.- Primero cargas xml cfdi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'Carga el XML Factura
    Sub subLoadFactura()
        'Activa el Dialogo de Archivos
        dlgOpen.Filter = "Xml | *.xml"
        If dlgOpen.ShowDialog = DialogResult.OK Then
 
            'Obtengo el Nombre del Archivo en la variable modular
            modStrFileName = dlgOpen.FileName
 
            'Cargo el Archivo al RichTextBox
            'txtLoad.Text '(modStrFileName, RichTextBoxStreamType.PlainText)
 
            Me.txtFactura.Text = dlgOpen.FileName
            'Me.txtFactura.Text = dlgOpen.FileName
        End If
    End Sub

2.- Cargas la addenda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'Carga el XML Addenda
    Sub subLoadAddenda()
        'Activa el Dialogo de Archivos
        dlgOpen.Filter = "Xml | *.xml"
        If dlgOpen.ShowDialog = DialogResult.OK Then
 
            'Obtengo el Nombre del Archivo en la variable modular
            modStrFileName = dlgOpen.FileName
 
            'Cargo el Archivo al RichTextBox
            'txtLoad.Text '(modStrFileName, RichTextBoxStreamType.PlainText)
 
            Me.txtAddenda.Text = dlgOpen.FileName
 
        End If
    End Sub

3.- Corres esta rutina que las une.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub subGrabaAddenda()
 
        Try
 
        'Create the XmlDocument.
        If (FnBoolDatosCorrectos()) Then
            '1. Cargo atravez de txtLoad la URL de la Factura Timbrada y sellada por SAT desde un directorio
            Dim docXmlF As XmlDocument = New XmlDocument()
            docXmlF.Load(txtFactura.Text)
 
 
 
            '2. Crear en otro XmlDocument el Nodo a Insertar Este lo cargo directamende del directorio, es el nodo Addenda capturado. 
            Dim docXmlA As New XmlDocument()
            docXmlA.Load("C:\XML\Addenda.xml")
 
            '3. Import el nodo Addenda dedocXmlA en el documento Original docXmlF. 
            Dim Addenda As XmlNode = docXmlF.ImportNode(docXmlA.DocumentElement.LastChild, True)
            docXmlF.DocumentElement.AppendChild(Addenda)
 
 
            ' 4. Save the modified fil XML a formato UTF8.
            docXmlF.PreserveWhitespace = True
            Dim wrtr As XmlTextWriter = New XmlTextWriter(txtAddenda.Text + txtPrefijo.Text, System.Text.Encoding.UTF8)
            docXmlF.WriteTo(wrtr)
            wrtr.Close()
            '5. Guardo y Senalo la Direccion
            docXmlF.Save(Console.Out)
            Console.WriteLine("C:\XML\CTT + .xml is created")
            Console.ReadLine()
            Console.WriteLine("Mostrando que se ha modificado el XML...")
            MsgBox("Se genero Addenda 7Eleven" & _
                   "    en" & _
                   " C:\XML\7E\A\Folio + prefijo _.xml is created ", MsgBoxStyle.Information, "Informacion .NET v1.0")
 
        End If
        Catch ex As Exception
            MsgBox("Error de Ruta, No Existe en 'C:\XML\7E\A\' , verificar con el Administrador de Sistemas", MsgBoxStyle.Exclamation, "Notificacion del Sistema Addendas 7Eleven")
        End Try
    End Sub

Espero que te sirva y no sea tarde, esto va para todos.


Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Leer XML CFDI y Anadir un nuevo nodo Addenda con VB.NET 2010

Publicado por NETFCRUZ ingfc@outlook.com (2 intervenciones) el 10/12/2015 17:05:45
Te puse la respuesta abajo de como insertar el nodo.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar