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 post
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 post
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 post
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 post
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 post
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 post
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 post
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 post
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 post
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 post
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 post
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 post
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 post
Share on other sites
Hace 23 minutos , LeandroA dijo:

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

O sea cada nodo encontrado en una columna

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Privacy Policy