[pyar] Orientacion para lxml y namespaces
Federico Manuel Echeverri Choux
echeverrifm en gmail.com
Mie Mar 5 19:46:40 ART 2014
Hola
Muchisimas Gracias
Lo reviso ya mismo
Saludos
Federico Manuel Echeverri Choux
mobile: (+521) 444-1-400683
Tel: (+52) 444-8185539
skype: echeverrifm
twitter: @echeverrifm
El 5 de marzo de 2014, 16:29, Pablo Gabriel Celayes
<pablocelayes en gmail.com>escribió:
> 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*.
>
> _______________________________________________
> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140305/7e1656af/attachment-0001.html>
More information about the pyar
mailing list