[pyar] Orientacion para lxml y namespaces
Pablo Gabriel Celayes
pablocelayes en gmail.com
Mie Mar 5 19:29:07 ART 2014
Casualmente hace un par de semanas me tocó hacer algo parecido como
challenge en un proceso con una empresa, ahí te va un ejemplo.
https://www.dropbox.com/s/dc35z20ysi9nt2o/translator.py
El código lo que hace es traducir un cierto formato de xml a otro con
distintos namespaces, pero más que nada la parte que te va a servir es la
que muestra cómo se le pasa un diccionario con los namespaces al parser.
Hasta donde tengo entendido, la parte que usás de de esos diccionarios son
las claves, pero el estándar es que cada namespace tenga una url asociada.
2014-03-05 17:26 GMT-03:00 Federico Manuel Echeverri Choux <
echeverrifm en gmail.com>:
> Hola Gente, Buenas tardes
>
> Tengo un problema con los namespaces que uso en la facturacion electronica
> y el agregado de una Addenda
> En este caso tengo un XML de una Factura que trae su Namespace y otro XML
> que genero para las especificaciones de la addenda del cliente facturado.
>
> Ejemplo:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <cfdi:Comprobante
> 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/cfdv32.xsd"
> version = "3.2"
> folio = "198"
> fecha = "2012-06-20T12:29:08"
> sello =
> "QrTzf32tfF2nbkwpTE7ikks9CzmmJdijrqYPZvUagviLdY54woI4vVRMEwYqBj35fwZveZsGarpis8bBM611mWLUeBJ2StEdVA6cUtkLQxrZq2hZAWecRRPM+KauIZNlMOms326NfSEjUtrhblaBeBDrwuSzVnp6bFX5v0/4pxs="
> formaDePago = "PAGO EN UNA SOLA EXHIBICION"
> noCertificado = "00001000000104421443"
> certificado =
> "MIIESzCCAzOgAwIBAgIUMDAwMDEwMDAwMDAxMDQ0MjE0NDMwDQYJKoZIhvcNAQEFBQAwggE2MTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExHzAdBgkqhkiG9w0BCQEWEGFjb2RzQHNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEzARBgNVBAcMCkN1YXVodGVtb2MxMzAxBgkqhkiG9w0BCQIMJFJlc3BvbnNhYmxlOiBGZXJuYW5kbyBNYXJ0w61uZXogQ29zczAeFw0xMTA5MjcxMzQ0MjlaFw0xMzA5MjYxMzQ0MjlaMIHrMS8wLQYDVQQDEyZQUk9WRUVET1JBIERFIENBSkFTIE5JTE8gUyBERSBSTCBERSBDVjEvMC0GA1UEKRMmUFJPVkVFRE9SQSBERSBDQUpBUyBOSUxPIFMgREUgUkwgREUgQ1YxLzAtBgNVBAoTJlBST1ZFRURPUkEgREUgQ0FKQVMgTklMTyBTIERFIFJMIERFIENWMSUwIwYDVQQtExxQQ04wOTA2MTZKUjMgLyBHQVJHNTYwMjExVjMwMR4wHAYDVQQFExUgLyBHQVJHNTYwMjExSENIVkJTMDIxDzANBgNVBAsTBlVOSURBRDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr6MQny1hr2OTzP2KxbCk7FCxMztly4tQhy7pFxex/PpxgJhA5/HI86R17FFkvzQ51TDWVXIjuEAY04vXPHH4Xhe2lCjjwASsRMPj6D24CrOxn8NAIIf9zTFGNfKG7hQ2rnbvaSeaGrMuMEJm2Bf/Bbvv/Bqg80fnK+QD1VadKCMCAwEAAaMdMBswDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCBsAwDQYJKoZIhvcNAQEFBQADggEBAKbJxBkrE9Ul/schqdEEibF/Nupe39ARywAcWf9S+bM7FVQCkKUHLf8+AEdKCkttl1b8iN2tRvq6IBovfsr6CcN2dAAxKP9ka/raRW3FgpFDv3c/eBsEapaMvGUw3kZmatYHcvGy/0I1v+A3Vg8aK8ivK30kezMvVWCzHk5M7PZh8TCIRneFqFtFO0oZFH1jBLThUNBjT47wOEVZZ+S+C2C4BQ3Jhyz3WEq899F0UKca8fDNBkS346UCKEuIBmsdqgCFQIRVjI97lxIQ060s3ColdZMhTFrAXdTzd1C73h6M4nKPIG/W2VPOX9cqHh345hDF3p0SzE0RqpUzOfEI+fg="
> condicionesDePago = "CREDITO"
> subTotal = "6430.00"
> TipoCambio = "1.00"
> Moneda = "Peso Mexicano"
> total = "7458.80"
> tipoDeComprobante = "ingreso"
> metodoDePago = "DEPOSITO EN CUENTA"
> LugarExpedicion = "PORFIRIO DIAZ 777 , CENTRO, 78430, SOLEDAD DE
> GRACIANO SANCHEZ, SOLEDAD DE GRACIANO SANCHEZ, SAN LUIS POTOSI, MEXICO">
> <cfdi:Emisor rfc = "PCN090616JR3" nombre = "PROVEEDORA DE CAJAS NILO,
> S DE R.L DE C.V.">
> <cfdi:DomicilioFiscal
> calle = "PORFIRIO DIAZ"
> noExterior = "777"
> colonia = "CENTRO"
> localidad = "SAN LUIS POTOSI"
> municipio = "SOLEDAD DE GRACIANO SANCHEZ"
> estado = "SAN LUIS POTOSI"
> pais = "MEXICO"
> codigoPostal = "78430"/>
> <cfdi:ExpedidoEn
> calle = "PORFIRIO DIAZ"
> noExterior = "777"
> colonia = "CENTRO"
> localidad = "SOLEDAD DE GRACIANO SANCHEZ"
> municipio = "SOLEDAD DE GRACIANO SANCHEZ"
> estado = "SAN LUIS POTOSI"
> pais = "MEXICO"
> codigoPostal = "78430"/>
> <cfdi:RegimenFiscal Regimen = "PERSONA MORAL REGIMEN GENERAL"/>
> </cfdi:Emisor>
> <cfdi:Receptor rfc = "APL1202014C3" nombre = "ALUPRINT PLEGADIZOS S.
> DE R.L. DE C.V.">
> <cfdi:Domicilio
> calle = "EJE 120"
> noExterior = "320"
> colonia = "MANZANA 35, ZONA INDUSTRIAL"
> localidad = "SAN LUIS POTOSI"
> municipio = "SAN LUIS POTOSI"
> estado = "SAN LUIS POTOSI"
> pais = "MEXICO"
> codigoPostal = "78395"/>
> </cfdi:Receptor>
> <cfdi:Conceptos>
> <cfdi:Concepto
> cantidad = "1000.00"
> unidad = "Pieza"
> descripcion = "CAJA REGULAR 50X31.5X17.5 14KG CS"
> valorUnitario = "6.43"
> importe = "6430.00"/>
> </cfdi:Conceptos>
> <cfdi:Impuestos totalImpuestosTrasladados = "1028.80">
> <cfdi:Traslados>
> <cfdi:Traslado
> impuesto = "IVA"
> tasa = "16.00"
> importe = "1028.80"/>
> </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/TimbreFiscalDigital/TimbreFiscalDigital.xsd"
> selloCFD =
> "QrTzf32tfF2nbkwpTE7ikks9CzmmJdijrqYPZvUagviLdY54woI4vVRMEwYqBj35fwZveZsGarpis8bBM611mWLUeBJ2StEdVA6cUtkLQxrZq2hZAWecRRPM+KauIZNlMOms326NfSEjUtrhblaBeBDrwuSzVnp6bFX5v0/4pxs="
> FechaTimbrado = "2012-06-20T12:29:09"
> UUID = "7742A047-33EA-4C12-AA19-E92656B698D5"
> noCertificadoSAT = "00001000000102695128"
> version = "1.0"
> selloSAT =
> "ioAudem/Zn2ZhjfxO0Xkslg5X6nr2pjWSWlFp/XGWoEdq6CPY+boybiDqIVOuB7R2oxijP0JH98g1JmDojqxFB3xFfXdieWTu+MXMocdPFlYJhoGq08va6Zx7qTbg6DQsFBjKLZ2WZbAFcthD9YoHAsnwTY+X6OD5CcLFWBmgBY="/>
> </cfdi:Complemento>
> </cfdi:Comprobante>
>
> Este es el XML generado por el sistema de facturacion, y esta es la
> Addenda creada por mi sistema
>
> <Addenda>
> <modelo:AddendaModelo>
> <modelo:requestForPayment type="SimpleInvoiceType"
> documentStructureVersion="AMC7.1" documentStatus="ORIGINAL"
> DeliveryDate="[FECHADOCTO(yyyy-mm-dd)]" contentVersion="1.3.1">
> <modelo:requestForPaymentIdentification>
> <modelo:entityType>FA</modelo:entityType>
>
> <modelo:uniqueCreatorIdentification>[FOLIO]</modelo:uniqueCreatorIdentification>
> </modelo:requestForPaymentIdentification>
> <modelo:specialInstruction code="AAB">
> <modelo:text>[CONDICION]</modelo:text>
> </modelo:specialInstruction>
> <modelo:orderIdentification>
> <modelo:referenceIdentification
> type="ON">[SUPEDIDO]</modelo:referenceIdentification>
> </modelo:orderIdentification>
> <modelo:AdditionalInformation>
> <modelo:referenceIdentification
> type="IV">[FOLIO]</modelo:referenceIdentification>
> </modelo:AdditionalInformation>
> <modelo:buyer>
> <modelo:gln>[CAMPOLIBRE2CLIE]</modelo:gln>
> <modelo:contactInformation>
> <modelo:personOrDepartmentName>
> <modelo:text>Escribir_Contacto_Compras</modelo:text>
> </modelo:personOrDepartmentName>
> </modelo:contactInformation>
> </modelo:buyer>
> <modelo:seller>
> <modelo:gln>Escribir_GLN_Proveedor</modelo:gln>
> <modelo:alternatePartyIdentification
> type="SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY">Escribir_Numero_Proveedor</modelo:alternatePartyIdentification>
> </modelo:seller>
> <modelo:shipTo>
> <modelo:gln>[CAMPOLIBRE2CONSIG]</modelo:gln>
> <modelo:nameAndAddress>
> <modelo:name>[CONSIGNARNOMBRE]</modelo:name>
> <modelo:streetAddressOne>[CONSIGNARCALLE] [CONSIGNARNUMINT]
> [CONSIGNARNUMEXT] [CONSIGNARCOLONIA]</modelo:streetAddressOne>
> <modelo:city>[CONSIGNARPOBLA]</modelo:city>
> <modelo:postalCode>[CONSIGNARCODIGO]</modelo:postalCode>
> </modelo:nameAndAddress>
> </modelo:shipTo>
> <modelo:InvoiceCreator>
> <modelo:gln>Escribir_GLN_Proveedor</modelo:gln>
> <modelo:alternatePartyIdentification
> type="VA">[EMISORRFC]</modelo:alternatePartyIdentification>
> <modelo:nameAndAddress>
> <modelo:name>[EMISORNOMBRE]</modelo:name>
> <modelo:streetAddressOne>[EMISORCALLE] [EMISORNUMEXT] [EMISORNUMINT]
> [EMISORCOL]</modelo:streetAddressOne>
> <modelo:city>[EMISORMUNICIPIO]</modelo:city>
> <modelo:postalCode>[EMISORCP]</modelo:postalCode>
> </modelo:nameAndAddress>
> </modelo:InvoiceCreator>
> <modelo:currency currencyISOCode="MXN">
> <modelo:currencyFunction>BILLING_CURRENCY</modelo:currencyFunction>
> <modelo:rateOfChange>[TIPOCAMBIO]</modelo:rateOfChange>
> </modelo:currency>
> <INILISTAPROD>
> <modelo:lineItem type="SimpleInvoiceLineItemType"
> orderLineNumber="[NUMPARTIDA]">
> <modelo:tradeItemIdentification>
> <modelo:gtin>[PRODALTERNA]</modelo:gtin>
> </modelo:tradeItemIdentification>
> <modelo:tradeItemDescriptionInformation language="ES">
> <modelo:longText>[PRODDESCRIP]</modelo:longText>
> </modelo:tradeItemDescriptionInformation>
> <modelo:invoicedQuantity
> unitOfMeasure="[PRODLIBRE1]">[CANTIDAD]</modelo:invoicedQuantity>
> <modelo:grossPrice>
> <modelo:Amount>[PRODPRECIO(#0.00)]</modelo:Amount>
> </modelo:grossPrice>
> <modelo:netPrice>
> <modelo:Amount>[PRODIMPORTE(#0.00)]</modelo:Amount>
> </modelo:netPrice>
> <modelo:AdditionalInformation>
> <modelo:referenceIdentification type="DQ">[Campo libre
> 1]</modelo:referenceIdentification>
> </modelo:AdditionalInformation>
> <modelo:tradeItemTaxInformation>
> <modelo:taxTypeDescription>VAT</modelo:taxTypeDescription>
> <modelo:tradeItemTaxAmount>
> <modelo:taxPercentage>[PRODPORCENIMP4(#0.00)]</modelo:taxPercentage>
> <modelo:taxAmount>[PRODMONTOIMP4(#0.00)]</modelo:taxAmount>
> </modelo:tradeItemTaxAmount>
> <modelo:taxCategory>TRANSFERIDO</modelo:taxCategory>
> </modelo:tradeItemTaxInformation>
> <modelo:totalLineAmount>
> <modelo:grossAmount>
> <modelo:Amount>[PRODSUBTOTAL(#0.00)]</modelo:Amount>
> </modelo:grossAmount>
> <modelo:netAmount>
> <modelo:Amount>[PRODIMPORTE(#0.00)]</modelo:Amount>
> </modelo:netAmount>
> </modelo:totalLineAmount>
> </modelo:lineItem>
> </INILISTAPROD>
> <modelo:totalAmount>
> <modelo:Amount>[SUBTOTAL(#0.00)]</modelo:Amount>
> </modelo:totalAmount>
> <modelo:baseAmount>
> <modelo:Amount>[IMPORTEANTESIMPUESTOS(#0.00)]</modelo:Amount>
> </modelo:baseAmount>
> <modelo:tax type="VAT">
> <modelo:taxPercentage>[PORCENIMPUESTO4(#0.00)]</modelo:taxPercentage>
> <modelo:taxAmount>[MONTOIMPUESTO4(#0.00)]</modelo:taxAmount>
> <modelo:taxCategory>TRANSFERIDO</modelo:taxCategory>
> </modelo:tax>
> <modelo:payableAmount>
> <modelo:Amount>[IMPORTE(#0.00)]</modelo:Amount>
> </modelo:payableAmount>
> </modelo:requestForPayment>
> </modelo:AddendaModelo>
> </Addenda>
>
> el problema es que cuando intento meter este ultimo XML al otro
>
> lo cual lo hago de esta manera
>
> obj_xml = etree.fromstring(invoice_xml.encode('utf-8'))
> add_ = lxml.etree.XML(addenda_xml)
>
> y cuando lo ejecuto me dice:
>
> lxml.etree.XMLSyntaxError: Namespace prefix modelo on AddendaModelo is not
> defined, line 2, column 22
>
> ya busque mucho pero no encuentro muchos casos practicos, como para llegar
> a una solucion, alguien hizo algo similar como para solucionarlo?
>
> Desde ya muchas gracias y Saludos.
>
>
> Federico Manuel Echeverri Choux
> mobile: (+521) 444-1-400683
> Tel: (+52) 444-8185539
> skype: echeverrifm
> twitter: @echeverrifm
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
--
*ıl**l**ıl**l**ı* ρąβℓ๏ *ıllı**lı*
We are the problem. And we should provide the *solution*.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140305/5e6f3af6/attachment-0001.html>
More information about the pyar
mailing list