Ver Mensaje Individual
  #2  
Antiguo 09-02-2018
tsk tsk is offline
Miembro
 
Registrado: dic 2017
Posts: 52
Reputación: 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