Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Python
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2018
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 154
Poder: 22
jourdan Va por buen camino
Como leer nodo de archivo xml con Python usando minidom

tengo u archivo xml con la siguiente estructura:

<?xml version="1.0" encoding="UTF-8"?><cfdi:Comprobante Version="3.3" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd " Serie="KNS" Folio="44" Fecha="2018-02-01T09:19:56" NoCertificado="00001000000407880000" Certificado="MIIGMzCCBBug...."" Moneda="MXN" TipoDeComprobante="I" MetodoPago="PUE" FormaPago="99" CondicionesDePago="Contado" SubTotal="540.00" Total="626.40" LugarExpedicion="11320" Sello="JKVJ""><cfdi:Emisor Rfc="GKM060127GP4" Nombre="GRUPO KROME DE MEXICO, SA DE CV" RegimenFiscal="601"/>
<cfdi:Receptor Rfc="IBS000800000" Nombre="IB Sistemas, S.A. de C.V." UsoCFDI="G03"/>
<cfdi:Conceptos><cfdi:Concepto ClaveProdServ="82101500" Cantidad="2.00" ClaveUnidad="HC" Descripcion="Tarjetas de presentación, impresas en offset digital." ValorUnitario="270.00" Importe="540.00"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="540.00" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="86.40"/></cfdi:Traslados></cfdi:Impuestos></cfdi:Concepto></cfdi:Conceptos><cfdi:Impuestos TotalImpuestosTrasladados="86.40"> <cfdi:Traslados><cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="86.40"/></cfdi:Traslados> </cfdi:Impuestos><cfdi:Complemento><tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd" Version="1.1" UUID="5CA56521-0763-11E8-87CC-00155D014007" FechaTimbrado="2018-02-01T09:19:57" RfcProvCertif="TBN040609RKA" SelloCFD="JKVJ"" NoCertificadoSAT="00001000000403557578" SelloSAT="jXmC54X9fW""/></cfdi:Complemento></cfdi:Comprobante>

Del cual quiero obtener el valor "totalImpuestosTrasladados" pero no lo he logrado.

Usando "getElementsByTagName" he logrado obtener la mayoría de los campos pero no lo he logrado con este.

Agradeceré cualquier ayuda

Gracias y saludos
__________________
Alejandro Jourdan
Responder Con Cita
  #2  
Antiguo 09-02-2018
tsk tsk is offline
Miembro
 
Registrado: dic 2017
Posts: 56
Poder: 7
tsk Va por buen camino
Sólo uno de los nodos de cfdi:Impuestos contiene el atributo TotalImpuestosTrasladados

esto bastaría para encontrar cual de ellos tiene el atributo.

Código:
for node in dom.getElementsByTagName("cfdi:Impuestos"):
    print node.getAttribute("TotalImpuestosTrasladados")
Aunque con lxml.etree y algo de xpath podrías hacer lo mismos.

Código:
from xml.dom.minidom import parse, parseString
from lxml import etree as ET

dom = parse("cfdi.xml")

print("-------------------------")

for node in dom.getElementsByTagName("cfdi:Impuestos"):
    print(node.getAttribute("TotalImpuestosTrasladados"))

#Con lxml.etree

d = ET.parse("cfdi.xml")

ns = {"cfdi":"h t t p : / / www . sat.gob.mx / cfd / 3"}
print("-------------------------")
#---------------------------
node = d.findall("//{h t t p : / / www . sat.gob.mx / cfd / 3}Impuestos/[@TotalImpuestosTrasladados]")[0]

for key,val in node.items():
    print(key,val)

print(node.xpath("@TotalImpuestosTrasladados")[0])

#---------------------------
print("--------------------------")
node = d.findall("//cfdi:Impuestos/[@TotalImpuestosTrasladados]",ns)[0]

for key,val in node.items():
    print(key,val)

print(node.xpath("@TotalImpuestosTrasladados")[0])

#---------------------------
print("----------------------------")
E = ET.XPathEvaluator(d,namespaces=ns)

print(E("//cfdi:Impuestos/@TotalImpuestosTrasladados")[0])
Sólo elimina los espacios en h t t p : / / www . sat.gob.mx / cfd / 3 y debe de funcionar.

De ejemplo use uno de los XML que vienen en la página del SAT y el resultado es el siguiente.

Código:
-------------------------



363104
-------------------------
('TotalImpuestosRetenidos', '1196492')
('TotalImpuestosTrasladados', '363104')
363104
--------------------------
('TotalImpuestosRetenidos', '1196492')
('TotalImpuestosTrasladados', '363104')
363104
----------------------------
363104
Responder Con Cita
  #3  
Antiguo 09-02-2018
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 154
Poder: 22
jourdan Va por buen camino
Muchisimas gracias, me pongo a hacer pruebas en este momento!
Saludos
__________________
Alejandro Jourdan
Responder Con Cita
  #4  
Antiguo 09-02-2018
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 154
Poder: 22
jourdan Va por buen camino
Me funciono muy bien!
Muchismas gracias
__________________
Alejandro Jourdan
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
leer nodo tfd de un cfdi xml jourdan Varios 18 28-08-2018 23:04:12
¿ Como leer un archivo INI externo ? etamburelli Varios 12 01-11-2016 22:19:57
C++Builder 6 CFDI Mexico ¿Como agregar nodo dentro de otro nodo como hijo? JXJ C++ Builder 0 10-03-2016 04:51:01
como abrir un archivo .hlp desde mi aplicacion usando un menu federiconqn21 Varios 2 20-05-2008 13:02:37
como leer n caracteres de un archivo manolop Varios 6 18-12-2007 23:50:06


La franja horaria es GMT +2. Ahora son las 02:36:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi