-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocess_xml.py
More file actions
80 lines (70 loc) · 3.29 KB
/
process_xml.py
File metadata and controls
80 lines (70 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import re
import xml.etree.ElementTree as ET
import pandas as pd
xml_tree = ET.parse("data.xml")
root = xml_tree.getroot() # Obtén el nodo raíz del XML (el nodo <people>)
namespaces = {
"cfdi": "http://www.sat.gob.mx/cfd/4",
"tfd": "http://www.sat.gob.mx/TimbreFiscalDigital",
"cartaporte31": "http://www.sat.gob.mx/CartaPorte31"
}
mapping_attribs = {
"concepto_impuesto": ".//cfdi:Conceptos//cfdi:Traslados//cfdi:Traslado[@Impuesto]",
"concepto_impuesto": ".//cfdi:Conceptos//cfdi:Traslados//cfdi:Traslado[@Impuesto]",
"impuesto_impuesto": ".//cfdi:Complemento//cartaporte31:CartaPorte[@Version]",
"impuesto_retencion": ".//cfdi:Impuestos//cfdi:Retenciones//cfdi:Retencion[@TipoFactor]",
"uuid": ".//cfdi:Complemento//tfd:TimbreFiscalDigital[@UUID]",
"cliente": ".//cfdi:Receptor[@Rfc]",
"conceptoTraslado": ".//cfdi:Complemento//tfd:TimbreFiscalDigital[@UUID]",
"impuestoTraslado": ".//cfdi:Complemento//cartaporte31:CartaPorte//cartaporte31:Mercancias//cartaporte31:Mercancia[@BienesTransp]",
"impuestoRetencion": ".//cfdi:Complemento//cartaporte31:CartePorte//cartaporte31:Mercancias//cartaporte31:Mercancia[@Cantidad]",
# "clienteRfc": "assassasasss"
}
attribs_data = {
"conceptoTraslado": [],
"ImpuestoTraslado": [],
"Impuest oRetencion": [],
"clienteRfc": [],
"cfdi": [],
"claveSubProducto": [],
"volumenIT": [],
"volumenFT": [],
"terminalAlmYDist": [],
"permisoAlmYDist": [],
"temperatura": [],
"presionAbsoluta": [],
"fechaYHIM": [],
"fechaYHFM": [],
"tipo": [],
"movimiento": [],
"rfcCliente": []
}
# Recorrer los paths definidos en el diccionario
attrib_pattern = r"\[@([^\]]+)\]"
for key, value in mapping_attribs.items():
attrib_name = re.search(attrib_pattern, value).group(1)
find_attrib = root.find(value, namespaces)
if find_attrib is not None:
attrib_value = find_attrib.get(attrib_name, "No existe el atributo.")
print("Attrib =>", attrib_name, "|", key)
print("Attrib Value =>", attrib_value)
# attribs_data.update()
if find_attrib is None:
find_attrib = 0
continue
# print(find_attrib.attrib[attrib_name])
# print(find_attrib.attrib.get(attrib_name, "No"))
# print(f"KEY => {key} VALUE => {value} RESULTADO => {find_attrib.attrib.get(attrib_name, 0)}")
# 'cfdi': ('cfdi:Comprobante', 'cfdi:Complemento', 'tfd:TimbreFiscalDigital','@UUID')
# "claveSubProducto": ("cfdi:Comprobante", "cfdi:Complemento", "cartaporteXX:CartaPorte", "cartaporteXX:Mercancias", "cartaporteXX:Mercancia", "@BienesTransp"),
# 'volumenIT': ('cfdi:Comprobante', "cfdi:Complemento", "cartaporteXX:CartaPorte", "cartaporteXX:Mercancias", "cartaporteXX:Mercancia", "@Cantidad"),
# 'volumenFT': ("cfdi", ),
# 'terminalAlmYDist': ("cfdi", ),
# 'permisoAlmYDist': ("cfdi", ),
# 'temperatura': ("cfdi", ),
# 'presionAbsoluta': ("cfdi", ),
# 'fechaYHIM': ("cfdi:Comprobante", "cfdi:Complemento", "cartaporteXX:CartaPorte", "cartaporteXX:Ubicaciones","cartaporteXX:Ubicacion", "@FechaHoraSalidaLlegada"),
# 'fechaYHFM': ("cfdi:Comprobante", "cfdi:Complemento", "cartaporteXX:CartaPorte", "cartaporteXX:Ubicaciones","cartaporteXX:Ubicacion", "@FechaHoraSalidaLlegada"),
# 'tipo': "Nacional",
# 'movimiento': "Entrega",
# 'rfcCliente': ('cfdi:Comprobante', 'cfdi:Emisor', '@Rfc'),