Jump to content

EXTRAER DATOS DE SECCION CDATA DE XML


Recommended Posts

Buen día, desde ya muchas gracias por su colaboración.

 

Estoy tratando de leer o capturar la información contenida en el nodo Invoice que se encuentran en la sección CDATA del xml adjunto pero no lo consigo, he tratado con varios códigos pero ninguno me ha resultado por lo cual agradecería su valiosa ayuda con un pequeño ejemplo con cualquiera de los campos del nodo Invoice del xml adjunto.

El ultimo código con el que intente es el siguiente:

 

Sub My_Example_Test()
    Dim sXml As String
    sXml = "<Root><SomeData>foo</SomeData>" & "<SomeCDATA><![CDATA[< src=""C:\Users\HP\Desktop\ad08301097230342100195863.xml""/>]]>" & "</SomeCDATA></Root>"
    
    Dim Dom As MSXML2.DOMDocument60
    Set Dom = New MSXML2.DOMDocument60
    Dom.LoadXML sXml
    
    Dim xmlSomeCData As MSXML2.IXMLDOMElement
    Dim listanodos As MSXML2.IXMLDOMNodeList
    
    Set xmlSomeCData = Dom.SelectSingleNode("Root/SomeCDATA")
    Debug.Print xmlSomeCData.Text 'Deberia mostrar el texto pero muestra el directorio del xml

    'creo esta parte no se esta ejecutando
    Set listanodos = Dom.SelectNodes("Invoice")
    For Each nodo In listanodos
        Debug.Print nodo.Text
    Next nodo
End Sub

 

Saludos Excelers

ad08301097230342100195863.xml

Link to comment
Share on other sites

Hace 54 minutos , DiegoLG dijo:

Que datos necesitas que te extraiga en este nodo?

@DiegoLG , cualquiera de los datos que esta dentro del CDATA para tomarlo como ejemplo ya que necesito extraer la mayoría.

Por Ejemplo:

Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyName/cbc:Name = PayU Colombia S.A.S

Invoice/cac:LegalMonetaryTotal/cbc:LineExtensionAmount= 4902.63

Muchas Gracias

Link to comment
Share on other sites

Hace 1 hora, DiegoLG dijo:

Checa,

Para que te des una idea.

Saludos,

 

 

Hace 1 hora, DiegoLG dijo:

Checa,

Para que te des una idea.

Saludos,

 

@DiegoLG En los ejemplos se extraen datos de nodos normales de xml, eso lo puedo hacer, lo que no he podido es extraer información de los nodos dentro de la seccion CDATA.

 

Gracias

Link to comment
Share on other sites

Hace 1 hora, JUANJG dijo:

@isidro, la pagina me lleva a una opción de descarga FCDI pero el archivo XML que estoy trabajando no tiene que ver con CFDI.

 

Gracias

descarga este programa: descargarcfdi.zip y instalalo, ese programa tiene para importar xml a excel checalo, y me dices yo no puedo instalara programa en mi maquina no tengo permiso es maquina de mi trabajo, nosotros a qui en la empresa usamos uno de paga y ese es gratuito y la pagina dice

Convertir tus archivos XML a Excel

Podrás convertir la información de tus comprobantes fiscales (XML) exportándolos a MS Excel.

  • Tendrás todos los datos de tus XML, incluidos los conceptos.
  • Se genera un archivo de Excel con más de 120 columnas con los datos de los XML.
  • Se desglosan los impuestos retenidos y trasladados por tipo y tasa.
Link to comment
Share on other sites

nosotros usamos este link descargamos de SAT los xml y guardamos en una ruta y el programa tiene para importar los xml a excel, teda la opción de elegir la ruta, pero ese es de paga tiene de prueba de 10 días, ese que te pase es gratis checalo tambien @DiegoLG.

a ver si le funciona

saludos 

Link to comment
Share on other sites

Hace 1 hora, isidrod dijo:

nosotros usamos este link descargamos de SAT los xml y guardamos en una ruta y el programa tiene para importar los xml a excel, teda la opción de elegir la ruta, pero ese es de paga tiene de prueba de 10 días, ese que te pase es gratis checalo tambien @DiegoLG.

a ver si le funciona

saludos 

El archivo que intento leer NO es de CFDI NI se descarga de SAT por lo cual ninguna de las opciones me aplican.

 

Gracias

Link to comment
Share on other sites

este es lo que extraje de tu xml 

Sub From_XML_To_XL()
'https://www.extendoffice.com/es/documents/excel/3388-excel-import-multiple-text-csv-xml-files.html
'UpdatebyKutoolsforExcel20151214
    Dim xWb As Workbook
    Dim xSWb As Workbook
    Dim xStrPath As String
    Dim xFileDialog As FileDialog
    Dim xFile As String
    Dim xCount As Long
    
     With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
    On Error GoTo ErrHandler
    With Worksheets("Hoja1").Select
    
    
    Set xFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
    xFileDialog.AllowMultiSelect = False
    xFileDialog.Title = "Select a folder [Kutools for Excel]"
    If xFileDialog.Show = -1 Then
        xStrPath = xFileDialog.SelectedItems(1)
    End If
    If xStrPath = "" Then Exit Sub
    Application.ScreenUpdating = False
    Set xSWb = ThisWorkbook
    xCount = 1
    xFile = Dir(xStrPath & "\*.xml")
    Do While xFile <> ""
        Set xWb = Workbooks.OpenXML(xStrPath & "\" & xFile)
        xWb.Sheets(1).UsedRange.Copy xSWb.Sheets(1).Cells(xCount, 1)
        xWb.Close False
        xCount = xSWb.Sheets(1).UsedRange.Rows.Count + 2
        xFile = Dir()
    Loop
   
  End With
   .ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
    xSWb.Save
    Exit Sub
ErrHandler:

    MsgBox "no files xml", , "Kutools for Excel"
End Sub

ese el código

xml a excel.xlsx

Link to comment
Share on other sites

Hace 1 hora, isidrod dijo:

es todo lo que puedo hacer por ti

No es lo que necesito pero muchas gracias por la intención.

La macro que colocas extrae el contenido de los nodos normalitos de un xml lo cual lo puedo realizar de diferentes maneras, pero NO la información de los nodos dentro de una sección CDATA que es lo que preciso.

Link to comment
Share on other sites

Hola fíjate esto, recupere el cdata con esta ruta y despues lei ese xml y saque un dato que es una fecha, vos sabrás como sacar lo que necesitas puntualmente.

Sub My_Example_Test()

    Dim Dom As MSXML2.DOMDocument60
    Set Dom = New MSXML2.DOMDocument60

    Dom.Load "C:\Users\Windows\Downloads\ad08301097230342100195863.xml"
    MsgBox Dom.ChildNodes.Item(1).ChildNodes(11).ChildNodes.Item(0).ChildNodes.Item(2).ChildNodes.Item(0).Text
    Dom.LoadXML Dom.ChildNodes.Item(1).ChildNodes(11).ChildNodes.Item(0).ChildNodes.Item(2).ChildNodes.Item(0).Text
    MsgBox Dom.ChildNodes.Item(1).ChildNodes.Item(7).ChildNodes.Item(0).Text
End Sub

 

Link to comment
Share on other sites

Hace 16 horas, LeandroA dijo:

Hola fíjate esto, recupere el cdata con esta ruta y despues lei ese xml y saque un dato que es una fecha, vos sabrás como sacar lo que necesitas puntualmente.




Sub My_Example_Test()

    Dim Dom As MSXML2.DOMDocument60
    Set Dom = New MSXML2.DOMDocument60

    Dom.Load "C:\Users\Windows\Downloads\ad08301097230342100195863.xml"
    MsgBox Dom.ChildNodes.Item(1).ChildNodes(11).ChildNodes.Item(0).ChildNodes.Item(2).ChildNodes.Item(0).Text
    Dom.LoadXML Dom.ChildNodes.Item(1).ChildNodes(11).ChildNodes.Item(0).ChildNodes.Item(2).ChildNodes.Item(0).Text
    MsgBox Dom.ChildNodes.Item(1).ChildNodes.Item(7).ChildNodes.Item(0).Text
End Sub

 

Excelente, era lo que estaba buscando.

Muchas graciaaaas

Link to comment
Share on other sites

Si estas usando el xml adjunto al inicio del tema solo debes cambiar el directorio del mismo, si estas usando otro xml debes ver que dentro de la seccion cdata contenga los nodos hijos a que esta apuntando la instruccion Dom.Child...

Basicamente luego de abrir la seccion cdata ya puedes extraer laninformacion como lo haces en un xml normal.

Link to comment
Share on other sites

con estas líneas de código en la ventana inmediato leo todo el contenido del xml, incluso el de la cdata,  pero como haría para pasar dicho contenido en formato tabular a excel??🙄

Sub TestXML3()
    Dim XDoc As Object
    
    Set XDoc = CreateObject("MSXML2.DOMDocument")
    XDoc.async = False: XDoc.validateOnParse = False
    XDoc.Load (ThisWorkbook.Path & "\ad09004905940102100002111.xml")
    
    'Get Document Elements
    Set lists = XDoc.DocumentElement
    
    'Traverse all elements 2 branches deep
    For Each listNode In lists.ChildNodes
        Debug.Print "---Email---"
        For Each fieldNode In listNode.ChildNodes
           Debug.Print "[" & fieldNode.BaseName & "] = [" & fieldNode.Text & "]"
           
            
        Next fieldNode
    Next listNode
    
    Set XDoc = Nothing
End Sub

Agradezco su ayuda

Link to comment
Share on other sites

Hace 6 horas, fjaimes04 dijo:

con estas líneas de código en la ventana inmediato leo todo el contenido del xml, incluso el de la cdata,  pero como haría para pasar dicho contenido en formato tabular a excel??🙄

Agradezco su ayuda

ahí ya no te puedo ayudar, no se bien que seria tabular Excel, pero seguramente alguno mas podrá echar una mano en ese tema.

Link to comment
Share on other sites

  • Crear macros Excel

  • Posts

    • Sub CopiarMúltiple() Application.ScreenUpdating = False Range("C3:I7").Copy For x = 12 To 4998 Step 9 Range("C" & x).PasteSpecial xlPasteAll Next Application.CutCopyMode = False End Sub  
    • Janlui, muy bueno funciona perfecto eso lo que necesitaba magnifico...
    • Sub Concatenar() Dim fn As Long uFila = Range("H" & Cells.Rows.Count).End(xlUp).Row pFila = 1 For fila = pFila + 1 To uFila     fn = Range("I" & fila)     Range("O" & fila) = Range("H" & fila) & fn Next fila End Sub    
    • Buenas tardes, expertos solicito una ayuda para concatenar dos columnas una de ellas es en cuanto a la fechas, lo que pasa es que la macro que tengo concatena muy bien, solo tengo un inconveniente con las fechas dicha columna (I) estas formateadas por ejemplo asi: Feb-20 pero al concatenar el resultado asi: O-2AA6220/09/2021, pero asi no quiero, me gustaria concatenar que salga asi: A-234RV44032 los 5 ultimos digitos son de la fecha, bueno asi me gustaria que quede, la macro que estoy usando es: Sub Concatenar() uFila = Range("H" & Cells.Rows.Count).End(xlUp).Row pFila = 1 For fila = pFila + 1 To uFila     Range("O" & fila) = Range("H" & fila) & Range("I" & fila) Next fila End Sub Por favor si me podria dar una ayuda estare muy agradecido. Adjunto el archivo Consolidado.xlsm
    • Con la grabadora Pero son demasiadas filas. Sub Macro1() Range("C3:I7").Select Selection.Copy Range("C12").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Range("C21").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub Hace tiempo que no entro en el foro y no veo la opcion de subir libro. Un Saludo.
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy