Saltar al contenido

EXTRAER DATOS DE SECCION CDATA DE XML


JUANJG

Recommended Posts

publicado

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

publicado
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

publicado
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

publicado
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.
publicado

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 

publicado
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

publicado

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

publicado
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.

publicado

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

 

publicado
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

publicado

Saludos me sale error 99, que no se la variable del objeto with no se ha establecido.  

Alguna sugerencia 

publicado

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.

publicado
Hace 3 horas, fjaimes04 dijo:

Saludos me sale error 99, que no se la variable del objeto with no se ha establecido.  

Alguna sugerencia 

además de lo que te sugirió Juan, agregar la referencia "Microsoft XML, V6.0"

publicado

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

publicado
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.

publicado
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

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • A falta de una solución mas adelante, seguiré como hasta ahora, copiando y pegando el export en la plantilla. A mi me vale, pero quería evitar que el resto de usuarios (tampoco lo vamos a usar tantos!!) tuvieran que intervenir en nada del export y la transformación de datos de la plantilla. Mas o menos saben hacerlo, pero quería que todo estuviera automatizado. Si encuentro una solución os la pondré por aqui. Saludos.
    • Muy buen día a tod@s esperando se encuentren de la mejor manera posible,   Comparto lo siguiente: Estoy trabajando con un archivo en el cual me gustaría que cada que yo capturo ya sea un dato por ejemplo en la Cela A2, La fecha de la celda B2 se congele con la fecha en que estoy escribiendo algún dato, no obstante que en el resto de la columna continúe corriendo la fórmula: AHORA() hasta que yo capture dato y este se congele a ese momento,   La formula con la que lo estoy haciendo es la siguiente:  Congelar FECHA CAPTURA con error.xlsx =SI(ESBLANCO(A2), AHORA(), SI(ESBLANCO(B2), AHORA(), B2))  El problema es que al buscar en la misma B2 me arroja un error,    Cabe mencionar que para este ejercicio quisiera no usar macros ni VBA solo que funcione a base de formula, pero que esta no me arroje error como ya me lo hace   Les comparto CAPTURA DE ERROR,   Muchas gracias por el apoyo,   Saludos
    • Hola @Israel Cassales Es todo mucho mas "complicado". Estamos hablando de una multinacional, los ordenadores están "capados", la detección de redes esta desactivada, y solo funcionan los servicios de red necesarios, web, servidores de impresión, etc. Lo usuarios no podemos hacer nada de configuración en los ordenadores porque no tenemos privilegios de administración. Todos los usuarios tenemos Sap, (con diferentes perfiles, según los departamentos), office 365 (también con perfiles según funciones), y todo el software básico solo lo podemos instalar desde nuestro propio Software Center. Cualquier cosa que se salga de ahí, hay que solicitarla y cruzar los dedos para que te la aprueben.  En los departamentos de análisis, claro que tienen SAP BW,  SAP BI (yo mismo he solicitado perfiles y estoy a la espera) pero solo soy un simple SGA que lo único que intenta es automatizar al máximo mi trabajo diario, y estas cosas no deberíamos hacerlas, por perfil, capacidades y posibilidades técnicas.
    • Bueno, como dijera el Jack el destripador "vámonos por partes", ese temporal tiene un origen que es SAP. Hay algunos puntos que no están quedando claro y parece que el único medio que dispones es la WEB para que los usuarios tomen de ahí los datos de SAP ¿Qué versión de SAP tienes? Lo anterior también es confuso ¿tienen diferentes segmentos de VLAN o cómo? siempre hay una forma de poder comunicarse entre los equipos. ¿Mínimo están conectados al mismo Internet? Antes de usar herramientas externas a SAP, éste tiene sus propias soluciones ¿Qué datos son los que necesitan los demás usuarios? Entiendo que no quieran gastar licencias por el tema comercial pero si solo es leer podrías usar una API de SAP dependiendo de la versión que tengas, como el Service Layer, también está SAP WEB y otras. Si en tu lugar de trabajo tienen SAP (bajo licencia) debes tener un partner quien puede ofrecerte soluciones. Haciendo de lado la integridad de la información porque una vez exportados de SAP se vuelven editables y pierden confianza, además considerando que estás usando power query ¿por qué no usar el power BI? Este también se puede conectar con SAP. Identifica que software es el responsable de la información, origen y destino, eso debe facilitar el medio. ¡Saludines!    
    • Vale, ahora que lo pienso, tu solución no me vale; bueno no es que no me valga es que  me soluciona un problema que ya tengo resuelto. La macro me guarda bien el archivo en local de cada usuario con la sentencia  Mi problema es que si guardo el export en rutas locales relativas, PowerQuery no me deja conectarme a esas rutas, y si "guardo" el export en sharePoint con  El archivo no se guarda, que es como debería funcionar todo el proyecto. La solución pasa por conseguir que el export se guarde en SharePoint, porque hasta donde yo se, PowerQuery NO deja conectase a rutas relativas (en local) pero si podría conectarme a una ruta de SharePoint.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.