AYUDA!!! Leer cdfi:conceptos de XML

Para quienes programan Visual Basic aqui esta la solucion
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
angel montores
Mensajes: 2
Registrado: Vie Jul 08, 2016 1:43 am

AYUDA!!! Leer cdfi:conceptos de XML

Mensajepor angel montores » Vie Jul 08, 2016 2:35 am

Hola amigos, estoy atorado tratando de leer los CFDI:CONCEPTOS de varios xml. Son varias facturas (xml) que tengo que verificar que el valorUnitario sea el correcto segun el NoDescripcion. Pero tengo problema al tratar de contar cuantos conceptos contiene e iniciar un ciclo para leerlos.

-<cfdi:Conceptos>

<cfdi:Concepto importe="646425.00" valorUnitario="13.00" descripcion="GLUCOSA SERICA Y PARA LIQUIDOS ORGANICOS UNIDAD : PRUEBAS<br>" noIdentificacion="a023" unidad="SR" cantidad="49725.0000"/>
<cfdi:Concepto importe="604825.00" valorUnitario="13.00" descripcion="UREA SERICA Y URINARIA UNIDAD : PRUEBAS<br>" noIdentificacion="b345" unidad="SR" cantidad="46525.0000"/>
<cfdi:Concepto importe="660725.00" valorUnitario="13.00" descripcion="CREATININA SERICA Y URINARIA. UNIDAD : PRUEBAS<br>" noIdentificacion="b234" unidad="SR" cantidad="50825.0000"/>
<cfdi:Concepto importe="476450.00" valorUnitario="13.00" descripcion="ACIDO URICO SERICA Y URINARIA. UNIDAD : PRUEBAS<br>" noIdentificacion="b178" unidad="SR" cantidad="36650.0000"/>
<cfdi:Concepto importe="438425.00" valorUnitario="13.00" descripcion="COLESTEROL PRUEBAS UNIDAD : PRUEBAS<br>" noIdentificacion="b084" unidad="SR" cantidad="33725.0000"/>

</cfdi:Conceptos>


Este es mi c??digo donde no he podido contar cuantos conceptos son, y tampoco declarar el ciclo para extraer los datos.

Imports System.Xml

try
Dim mValorUnitario as Decimal
Dim mNoIdentificacion as String
Dim m_xmld As New System.Xml.XmlDocument
Dim m_nodelist As System.Xml.XmlNodeList
Dim m_node As System.Xml.XmlNode
m_xmld = New XmlDocument()
m_xmld.Load("C:\XML\invoice.xml")
m_nodelist = m_xmld.ChildNodes()
For Each m_node In m_nodelist
Dim mValorUnitario = m_node.Attributes.GetNamedItem("cfdi:conceptos").ChildNodes(0).Attributes.GetNamedItem("valorUnitario").Value
Dim mNoIdentificacion = m_node.Attributes.GetNamedItem("cfdi:conceptos").ChildNodes(0).Attributes.GetNamedItem("noIdentificacion").Value

'aqui insertaria un c??digo para validar con la base de datos
Next
Catch ex As Exception
End try


Les agradezco la ayuda de antemano. Saludos

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Re: AYUDA!!! Leer cdfi:conceptos de XML

Mensajepor s3cr3to » Vie Jul 08, 2016 10:24 am

No uso VB,
??No te haria falta un "try" dentro del ciclo "for" para procesar excepciones en cada concepto y que no se termine el ciclo?
digamos:

Código: Seleccionar todo

try
dim...
dim nCuantos as Integer
nCuantos = 0
For Each m_node In m_nodelist
  try
    ' ambos atributos son opcionales podrian no venir.
    Dim mValorUnitario...
  catch ... 'atrapar problemas posiblmente sin terminar el ciclo
  end try
  nCuantos =  nCuantos + 1 'al terminar te diria cuantos encontro
next
catch ...
end try

En este ejemplo, los cuenta al procesarlos, pero podrias contarlos en otro ciclo fuera del c??digo que muestras. No se si VB tenga facilidad para contar los elementos "Concepto" dentro de "Conceptos".
Como dije, no uso VB pero "la idea es esa"

angel montores
Mensajes: 2
Registrado: Vie Jul 08, 2016 1:43 am

Re: AYUDA!!! Leer cdfi:conceptos de XML

Mensajepor angel montores » Dom Jul 10, 2016 2:17 am

Mucha gracias s3cr3to por tu respuesta.

Les comparto como he podido saber cuantos conceptos tiene un xml (factura electronica), y extraer cualquier elemento de cada concepto.

codigo VB

Código: Seleccionar todo

Dim nsCFDi As XNamespace = "http://www.sat.gob.mx/cfd/3" 'para que pueda identificar el prefijo CFDI
Dim archivoXML As XDocument = XDocument.Load("C:\XML\books.xml") 'selecciona y abre la factura electr??nica xml
Dim importe As Integer = 0 'contador para saber cuantos conceptos tiene la factura
For Each lconcepto As XElement In archivoXML.Descendants(nsCFDi + "Comprobante").Elements(nsCFDi + "Conceptos").Elements() 'ciclo que recorre todos los conceptos de la factura
Dim Name As String = lconcepto.Attribute("descripcion").Value 'obtiene el valor de la descripci??n para darle tratamiento posterior
importe = importe + 1
Next
MsgBox(importe & " descripciones") 'imprime cuantos conceptos encontro


Volver a “Visual Basic”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados