elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Extraer datos de CDATA de un archivo XML en C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Extraer datos de CDATA de un archivo XML en C#  (Leído 6,802 veces)
Gokuman

Desconectado Desconectado

Mensajes: 186



Ver Perfil
Extraer datos de CDATA de un archivo XML en C#
« en: 24 Marzo 2015, 23:49 pm »

Hola amigos ando algo perdido, tengo un archivo XML donde necesito extraer datos que se encuentran entre etiquetas que a la vez estan dentro un CDATA no se como manejarlo, lo intente con el XPATH pero me extrae toda la cadena del CDATA mas no la etiquetas que quiero

Supongamos tengo este XML y quiero sacar lo que esta entre las etiquetas ambiente, razonSocial y descripción

Ejemplo
Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <autorizacion>
  3. <estado>AUTORIZADO</estado><numeroAutorizacion>1703201515411617921521270013730687438</numeroAutorizacion>
  4. <fechaAutorizacion>2015-03-17T15:41:16.486-05:00</fechaAutorizacion>
  5. <comprobante>
  6. <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
  7. <factura id="comprobante" version="1.0.0">
  8. <infoTributaria>
  9. <ambiente>2</ambiente>
  10. <tipoEmision>1</tipoEmision>
  11. <razonSocial>UNNOCYCLES CIA. LTDA.</razonSocial><nombreComercial>UNNOCYCLES CIA. LTDA.</nombreComercial>
  12. <ruc>1792152127001</ruc>
  13. <detalles><detalle><codigoPrincipal>5132</codigoPrincipal><codigoAuxiliar>FX150FM-BLA</codigoAuxiliar><descripcion> MOTO  FX 150  FORTE BLANCO  MOTOR UNO</descripcion><cantidad>2</cantidad><precioUnitario>1887.11</precioUnitario><descuento>1889.76</descuento><precioTotalSinImpuesto>1884.46</precioTotalSinImpuesto><impuestos><impuesto><codigo>2</codigo><codigoPorcentaje>2</codigoPorcentaje><tarifa>12.00</tarifa><baseImponible>1884.46</baseImponible><valor>226.14</valor></impuesto></impuestos></detalle></detalles>]></comprobante></autorizacion>


« Última modificación: 25 Marzo 2015, 00:01 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Extraer datos de CDATA de un archivo XML en C#
« Respuesta #1 en: 25 Marzo 2015, 00:44 am »

Buenas!

Para empezar, hay algunos errores en ese documento XML cómo para poder parsearlo.

1. El CDATA de tu documento XML lo tienes mal cerrado en </detalles>]> sería así: </detalles>]]>

2. Los elementos <infoTributaria> y <factura> no los cierras en la expresión literal.

Una vez hayas corregido esos fallos ...y de paso no te vendría nada mal formatear/indentar el código para hacerlo minimanete legible al ojo humano y así además evitar en el futuro ese tipo de errores que he mencionado,
te quedaía más o menos un documento así:

Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <autorizacion>
  3. <estado>AUTORIZADO</estado>
  4. <numeroAutorizacion>1703201515411617921521270013730687438</numeroAutorizacion>
  5. <fechaAutorizacion>2015-03-17T15:41:16.486-05:00</fechaAutorizacion>
  6. <comprobante>
  7. <![CDATA[
  8. <?xml version="1.0" encoding="UTF-8"?>
  9. <factura id="comprobante" version="1.0.0">
  10. <infoTributaria>
  11. <ambiente>2</ambiente>
  12. <tipoEmision>1</tipoEmision>
  13. <razonSocial>UNNOCYCLES CIA. LTDA.</razonSocial>
  14. <nombreComercial>UNNOCYCLES CIA. LTDA.</nombreComercial>
  15. <ruc>1792152127001</ruc>
  16. <detalles>
  17. <detalle>
  18. <codigoPrincipal>5132</codigoPrincipal>
  19. <codigoAuxiliar>FX150FM-BLA</codigoAuxiliar>
  20. <descripcion> MOTO  FX 150  FORTE BLANCO  MOTOR UNO</descripcion>
  21. <cantidad>2</cantidad>
  22. <precioUnitario>1887.11</precioUnitario>
  23. <descuento>1889.76</descuento>
  24. <precioTotalSinImpuesto>1884.46</precioTotalSinImpuesto>
  25. <impuestos>
  26. <impuesto>
  27. <codigo>2</codigo>
  28. <codigoPorcentaje>2</codigoPorcentaje>
  29. <tarifa>12.00</tarifa>
  30. <baseImponible>1884.46</baseImponible>
  31. <valor>226.14</valor>
  32. </impuesto>
  33. </impuestos>
  34. </detalle>
  35. </detalles>
  36. </infoTributaria>
  37. </factura>
  38. ]]>
  39. </comprobante>
  40. </autorizacion>

Ahora, solo debes cargar el documento corregido, y cargar la expresión literal cómo si fuese un documento XML adicional, y ya podrás parsear sus nodos/elementos cómo en este ejemplo:

Código
  1.        ' Valor literal.
  2.        Dim cdataValue As String = XDocument.Load("C:\Doc.xml").
  3.                                   <autorizacion>.<comprobante>.First.Value.
  4.                                   Trim({" "c, ControlChars.Lf, ControlChars.Tab})
  5.  
  6.        ' Documento XML desde un valor literal.
  7.        Dim xDoc As XDocument = XDocument.Parse(cdataValue)
  8.  
  9.        Dim sb As New System.Text.StringBuilder
  10.        With sb
  11.            .AppendFormat("Ambiente....: {0}", xDoc.<factura>.<infoTributaria>.<ambiente>.Value)
  12.            .AppendLine()
  13.  
  14.            .AppendFormat("Razón.Social: {0}", xDoc.<factura>.<infoTributaria>.<razonSocial>.Value)
  15.            .AppendLine()
  16.  
  17.            .AppendFormat("Descripción.: {0}", xDoc.<factura>.<infoTributaria>.<detalles>.<detalle>.<descripcion>.Value.Trim(" "c))
  18.        End With
  19.  
  20.        Trace.WriteLine(sb.ToString)

Saludos


« Última modificación: 25 Marzo 2015, 01:32 am por Eleкtro » En línea



Gokuman

Desconectado Desconectado

Mensajes: 186



Ver Perfil
Re: Extraer datos de CDATA de un archivo XML en C#
« Respuesta #2 en: 27 Marzo 2015, 03:37 am »

Bueno el XML lo copie de otro que es muchísimo mas grande solo como ejemplo no me percate de las etiquetas  :silbar: en todo caso gracias me ayudaste a comprender mejor como trabajar con esto
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Extraer voz de un archivo o extraer la musica solamente !!!!!
Multimedia
magnox 2 3,974 Último mensaje 28 Septiembre 2004, 17:16 pm
por theloop
extraer codigo de un archivo .obj y .dat
Ingeniería Inversa
jesymar 1 7,171 Último mensaje 24 Diciembre 2007, 01:45 am
por Shaddy
Manejar archivo .txt desde java (ingresar datos, modificar datos, buscar datos y
Java
chuystoty 9 106,463 Último mensaje 20 Mayo 2012, 06:13 am
por ELMED
extraer sonidos de un archivo .jar
Ingeniería Inversa
daniel7885 2 3,494 Último mensaje 14 Noviembre 2013, 09:32 am
por Mad Antrax
Como extraer multiples datos de un archivo de texto[AYUDA]
Programación C/C++
Rastreator1010 0 2,295 Último mensaje 16 Octubre 2014, 20:17 pm
por Rastreator1010
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines