如何将所有元素从xml检索到数据帧?python

2024-05-20 02:32:03 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次问问题,提前谢谢

因此,我试图处理数百个具有非常特殊格式的XML文件(python脚本、XML输出、熊猫输出和下面的原始XML)

通过剥离CDATA标记,我能够捕获XML的特定部分,这非常棒,但现在我需要将提取的XML中的“detalles”项传递到数据帧。我尝试了很多方法,检查了不同的问题,但我仍然得到了一个非类型的空单元格

关于如何获取所有数据有什么想法吗?谢谢

这是我的代码:

from lxml import etree
import pandas as pd

root= etree.parse(r'Factura 2.xml')
root2 = etree.XML(etree.tostring(root))
    
invoice = root2[3]
print(invoice.text)#i see here under the tag deatlles , taht the invoice has items in it

new_xml = invoice.text
new_xml= new_xml.encode()#forces to encode XML to default encoding
roott=etree.XML(new_xml)

#pass data to pandas dataframe
data = []
cols = []
for i, child in enumerate(roott):
    data.append([subchild.text for subchild in child])
    cols.append(child.tag)

df = pd.DataFrame(data).T  # Write in DF and transpose it
df.columns = cols  # Update column names
df.to_excel('table.xlsx')
print(df)

这是输出:


<?xml version="1.0" encoding="UTF-8" standalone="no"?><factura id="comprobante" version="2.1.0">
  <infoTributaria>
    <ambiente>2</ambiente>
    <tipoEmision>1</tipoEmision>
    <razonSocial>INVERNEG S.A.</razonSocial>
    <ruc>0990658498001</ruc>
    <claveAcceso>2201202101099065849800120030120000802950008029516</claveAcceso>
    <codDoc>01</codDoc>
    <estab>003</estab>
    <ptoEmi>012</ptoEmi>
    <secuencial>000080295</secuencial>
    <dirMatriz>AV. DE LAS AMERICAS 807 Y CALLE SEGUNDA</dirMatriz>
  </infoTributaria>
  <infoFactura>
    <fechaEmision>22/01/2021</fechaEmision>
    <dirEstablecimiento>AV. 10 DE AGOSTO # 132 Y DE LOS CEREZOS</dirEstablecimiento>
    <contribuyenteEspecial>136</contribuyenteEspecial>
    <obligadoContabilidad>SI</obligadoContabilidad>
    <tipoIdentificacionComprador>04</tipoIdentificacionComprador>
    <razonSocialComprador>SANTOS ANDINO JOSE RODRIGO</razonSocialComprador>
    <identificacionComprador>1704484185001</identificacionComprador>
    <direccionComprador>AV. MARISCAL SUCRE S8-493 Y JOSE MENDOZA</direccionComprador>
    <totalSinImpuestos>84.15</totalSinImpuestos>
    <totalDescuento>0</totalDescuento>
    <totalConImpuestos>
      <totalImpuesto>
        <codigo>2</codigo>
        <codigoPorcentaje>2</codigoPorcentaje>
        <descuentoAdicional>0.00</descuentoAdicional>
        <baseImponible>84.15</baseImponible>
        <tarifa>12.00</tarifa>
        <valor>10.10</valor>
      </totalImpuesto>
    </totalConImpuestos>
    <propina>0.00</propina>
    <importeTotal>94.25</importeTotal>
    <moneda>DOLAR</moneda>
    <pagos>
      <pago>
        <formaPago>20</formaPago>
        <total>94.25</total>
        <plazo>30</plazo>
        <unidadTiempo>Dias</unidadTiempo>
      </pago>
    </pagos>
  </infoFactura>
  <detalles>
    <detalle>
      <codigoPrincipal>SH6607-XPL</codigoPrincipal>
      <descripcion>20K KM SYNTHETIC LF PH2876 Ford Mazda.</descripcion>
      <cantidad>34.00</cantidad>
      <precioUnitario>2.4750</precioUnitario>
      <descuento>0.00</descuento>
      <precioTotalSinImpuesto>84.15</precioTotalSinImpuesto>
      <impuestos>
        <impuesto>
          <codigo>2</codigo>
          <codigoPorcentaje>2</codigoPorcentaje>
          <tarifa>12.00</tarifa>
          <baseImponible>84.15</baseImponible>
          <valor>10.10</valor>
        </impuesto>
      </impuestos>
    </detalle>
  </detalles>
  <infoAdicional>
    <campoAdicional nombre="emailCliente">motozone25@gmail.com</campoAdicional>
    <campoAdicional nombre="OrdenCompra">NN</campoAdicional>
    <campoAdicional nombre="CodSociedad">Dynamics</campoAdicional>
    <campoAdicional nombre="CodInternoSAP">ivn</campoAdicional>
  </infoAdicional>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:etsi="http://uri.etsi.org/01903/v1.3.2#" Id="Signature260661">
<ds:SignedInfo Id="Signature-SignedInfo959896">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference Id="SignedPropertiesID72112" Type="http://uri.etsi.org/01903#SignedProperties" URI="#Signature260661-SignedProperties267295">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>2XMqZGYiZj19+ASI+0cw/ZpY32U=</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#Certificate1621720">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>7ypTHELgqKKlA36P9wVJ8tB+LLY=</ds:DigestValue>
</ds:Reference>
<ds:Reference Id="Reference-ID-24390" URI="#comprobante">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>IMXyzVuehrGVc8DIwS/O7z+yiEs=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue Id="SignatureValue783577">
e7j105IptFmzcpMNYsbkrByTaMnV1XPmnyJ69dXCCfifwooEKpHxiNDlimPYcfQV7ZpLJ4V5g4H1
CtobnB9U/GgKQF1uQz6uCFzyvyxp3P6TBg5iJ2Tbv4txCWu7OZBlQmbeilqVOkV15KAbVPZlqdxJ
XkJPvqRxxOVoPzidRbGWCZR9Q19lNdNEV8yHz4AtkpMWl3JtRi1k7n4aRPFDl1PC7nhcLWIuDXuD
sImgREjbGzY+PBoBw48DlSyXM/eABSBtwuZESSmYcC9k8ZWmD59VuFUqz1bFgb4LxhMTWjzNlLf2
CmbplKnqGZfaE6Kp+h0tJi6+7PFdlhm+dGNaCg==
</ds:SignatureValue>
<ds:KeyInfo Id="Certificate1621720">
<ds:X509Data>
<ds:X509Certificate>
MIIKFzCCB/+gAwIBAgIEW2EYeTANBgkqhkiG9w0BAQsFADCBoTELMAkGA1UEBhMCRUMxIjAgBgNV
BAoTGUJBTkNPIENFTlRSQUwgREVMIEVDVUFET1IxNzA1BgNVBAsTLkVOVElEQUQgREUgQ0VSVElG
SUNBQ0lPTiBERSBJTkZPUk1BQ0lPTi1FQ0lCQ0UxDjAMBgNVBAcTBVFVSVRPMSUwIwYDVQQDExxB
QyBCQU5DTyBDRU5UUkFMIERFTCBFQ1VBRE9SMB4XDTE5MDkyMzEzNDkyNFoXDTIxMDkyMzE0MTky
NFowgbYxCzAJBgNVBAYTAkVDMSIwIAYDVQQKExlCQU5DTyBDRU5UUkFMIERFTCBFQ1VBRE9SMTcw
NQYDVQQLEy5FTlRJREFEIERFIENFUlRJRklDQUNJT04gREUgSU5GT1JNQUNJT04tRUNJQkNFMQ4w
DAYDVQQHEwVRVUlUTzE6MBEGA1UEBRMKMDAwMDA5MTg5NjAlBgNVBAMTHkpVU1RPIEVOUklRVUUg
R09OWkFMRVogQUxNRUlEQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMqyjftcUein
EL0FI3Sc2um7sr2dhfuSdOhPgZQPwr64/0Du9Uo475cqS4oD3QyW8m4HK2OFsqiJr7Pp9DmqyuON
YX6nWrq8sdlRKoSnML2MDGgmHvEjBc/ezq/04vpcT7i8BWXQoe2Pk3mI2mPIWoimv91eg5euPYvv
UX+cF44kNE3KSBGsPezFyOB1FglFQxG2wlm8s6Yl4TJqvjo6NpTErpesugXntNEq2tlPoOtPt4cw
9BQ/buh7oDIP1HA0ilTioXkNqPY88elJYheuKJI/lPWM2+fBeXNVjTV7SIqJrPM5R+A8GLlWDYge
vOle5W9pwLvbx3r1+KYToqoSsx8CAwEAAaOCBT4wggU6MAsGA1UdDwQEAwIHgDBnBgNVHSAEYDBe
MFwGCysGAQQBgqg7AgIBME0wSwYIKwYBBQUHAgEWP2h0dHA6Ly93d3cuZWNpLmJjZS5lYy9wb2xp
dGljYS1jZXJ0aWZpY2Fkby9wZXJzb25hLWp1cmlkaWNhLnBkZjCBkQYIKwYBBQUHAQEEgYQwgYEw
PgYIKwYBBQUHMAGGMmh0dHA6Ly9vY3NwLmVjaS5iY2UuZWMvZWpiY2EvcHVibGljd2ViL3N0YXR1
cy9vY3NwMD8GCCsGAQUFBzABhjNodHRwOi8vb2NzcDEuZWNpLmJjZS5lYy9lamJjYS9wdWJsaWN3
ZWIvc3RhdHVzL29jc3AwGwYKKwYBBAGCqDsDCgQNEwtJTlZFUk5FRyBTQTAdBgorBgEEAYKoOwML
BA8TDTA5OTA2NTg0OTgwMDEwGgYKKwYBBAGCqDsDAQQMEwowOTA1MzMxMTc5MB0GCisGAQQBgqg7
AwIEDxMNSlVTVE8gRU5SSVFVRTAYBgorBgEEAYKoOwMDBAoTCEdPTlpBTEVaMBcGCisGAQQBgqg7
AwQECRMHQUxNRUlEQTAaBgorBgEEAYKoOwMFBAwTClBSRVNJREVOVEUwOgYKKwYBBAGCqDsDBwQs
EypBViBERSBMQVMgIEFNRVJJQ0FTICAgODA3IFkgQ0FMTEUgIFNFR1VOREEwGQYKKwYBBAGCqDsD
CAQLEwkwNDI2OTA4MDAwGQYKKwYBBAGCqDsDCQQLEwlHdWF5YXF1aWwwFwYKKwYBBAGCqDsDDAQJ
EwdFQ1VBRE9SMB0GCisGAQQBgqg7AzIEDxMNMDk5MDY1ODQ5ODAwMTAgBgorBgEEAYKoOwMzBBIT
EFNPRlRXQVJFLUFSQ0hJVk8wJgYDVR0RBB8wHYEbanVzdG8uZ29uemFsZXpAaW52ZXJuZWcuY29t
MIIB3wYDVR0fBIIB1jCCAdIwggHOoIIByqCCAcaGgdVsZGFwOi8vYmNlcWxkYXBzdWJwMS5iY2Uu
ZWMvY249Q1JMODQyLGNuPUFDJTIwQkFOQ08lMjBDRU5UUkFMJTIwREVMJTIwRUNVQURPUixsPVFV
SVRPLG91PUVOVElEQUQlMjBERSUyMENFUlRJRklDQUNJT04lMjBERSUyMElORk9STUFDSU9OLUVD
SUJDRSxvPUJBTkNPJTIwQ0VOVFJBTCUyMERFTCUyMEVDVUFET1IsYz1FQz9jZXJ0aWZpY2F0ZVJl
dm9jYXRpb25MaXN0P2Jhc2WGNGh0dHA6Ly93d3cuZWNpLmJjZS5lYy9DUkwvZWNpX2JjZV9lY19j
cmxmaWxlY29tYi5jcmykgbUwgbIxCzAJBgNVBAYTAkVDMSIwIAYDVQQKExlCQU5DTyBDRU5UUkFM
IERFTCBFQ1VBRE9SMTcwNQYDVQQLEy5FTlRJREFEIERFIENFUlRJRklDQUNJT04gREUgSU5GT1JN
QUNJT04tRUNJQkNFMQ4wDAYDVQQHEwVRVUlUTzElMCMGA1UEAxMcQUMgQkFOQ08gQ0VOVFJBTCBE
RUwgRUNVQURPUjEPMA0GA1UEAxMGQ1JMODQyMCsGA1UdEAQkMCKADzIwMTkwOTIzMTM0OTI0WoEP
MjAyMTA5MjMxNDE5MjRaMB8GA1UdIwQYMBaAFEii3yMfHfgsUXqMA81JMqUJwZSrMB0GA1UdDgQW
BBRo1dATwJqFbr5m83H1ebKUyJ296jAJBgNVHRMEAjAAMBkGCSqGSIb2fQdBAAQMMAobBFY4LjED
AgSwMA0GCSqGSIb3DQEBCwUAA4ICAQA5UfSwQYbsGAz9Ygq6AoBVFBvzrbG/ebqTM7DCnPh9C6vN
EgZ2LqfWENb05h0AdP+6lhVz6RXBhMKnoh9bfJkTDbBj6SOxOQkiVueUgrTHJOm45sTW2Rd6Sv/M
y7wleKR6muSWGOSILXvp3zxPjHklMfTRMsAYDpzRY0OhpOzKreJWXeI/BxAxrPW/D18BjwojKjeu
SsNd8PSMmye8ACJtZ05C6cZcljtM0Fu3YGRCW5rLR2U79OtKq7FFSGyPwXdzK5b4E0WgbHcEMmkY
h7n0IWxdhOyzfHdMGE+5NHef07/EWRKgyadtw6/TR4bcoXBBPyysvzmySx0iiAw0OGhLl86vxAC2
4Tj705j2LMYbIPrzUUuYQEpJ+FCwF6/n/DxYgjwURCIEq6GSSWRAdOXUVWgHoNfGRQ9I6K8BsFsI
6PKHZZ56SCwq/RvWwlpe2r622IunN9QiMgMt1WeYmVK4EzSiOh6Vr2tUyyYE3F9n2s+FEwXCtV/l
acFyRyoPopQo53Sj+BjanHAZ6NmMAqpDUgc8ZhSCXQ3U0OZlZGtxAjxtkoSPbdqMj+YeL4Ummo+I
85Cjcw4sBYSLjaPeQzEp5xYVI9Zxec4j3w6dygHv3z4rzjX7Hp5FT3gorEGgoB7Chwf6/O/tOhNJ
IHnbaAIJCeOVwlLyRJUAxRKagkcA8w==
</ds:X509Certificate>
</ds:X509Data>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
yrKN+1xR6KcQvQUjdJza6buyvZ2F+5J06E+BlA/Cvrj/QO71SjjvlypLigPdDJbybgcrY4WyqImv
s+n0OarK441hfqdauryx2VEqhKcwvYwMaCYe8SMFz97Or/Ti+lxPuLwFZdCh7Y+TeYjaY8haiKa/
3V6Dl649i+9Rf5wXjiQ0TcpIEaw97MXI4HUWCUVDEbbCWbyzpiXhMmq+Ojo2lMSul6y6Bee00Sra
2U+g60+3hzD0FD9u6HugMg/UcDSKVOKheQ2o9jzx6UliF64okj+U9Yzb58F5c1WNNXtIioms8zlH
4DwYuVYNiB686V7lb2nAu9vHevX4phOiqhKzHw==
</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
</ds:KeyInfo>
<ds:Object Id="Signature260661-Object151833"><etsi:QualifyingProperties Target="#Signature260661"><etsi:SignedProperties Id="Signature260661-SignedProperties267295"><etsi:SignedSignatureProperties><etsi:SigningTime>2021-01-22T17:39:56-05:00</etsi:SigningTime><etsi:SigningCertificate><etsi:Cert><etsi:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>m1xycXw93GXwQi44F/n8Fr4r2TM=</ds:DigestValue></etsi:CertDigest><etsi:IssuerSerial><ds:X509IssuerName>CN=AC BANCO CENTRAL DEL ECUADOR,L=QUITO,OU=ENTIDAD DE CERTIFICACION DE INFORMACION-ECIBCE,O=BANCO CENTRAL DEL ECUADOR,C=EC</ds:X509IssuerName><ds:X509SerialNumber>1533089913</ds:X509SerialNumber></etsi:IssuerSerial></etsi:Cert></etsi:SigningCertificate></etsi:SignedSignatureProperties><etsi:SignedDataObjectProperties><etsi:DataObjectFormat ObjectReference="#Reference-ID-24390"><etsi:Description>comprobante</etsi:Description><etsi:MimeType>text/xml</etsi:MimeType></etsi:DataObjectFormat></etsi:SignedDataObjectProperties></etsi:SignedProperties></etsi:QualifyingProperties></ds:Object></ds:Signature></factura>
                                       infoTributaria  ...      {http://www.w3.org/2000/09/xmldsig#}Signature
0                                                   2  ...                                                 \n
1                                                   1  ...  \ne7j105IptFmzcpMNYsbkrByTaMnV1XPmnyJ69dXCCfif...
2                                       INVERNEG S.A.  ...                                                 \n
3                                       0990658498001  ...                                               None
4   2201202101099065849800120030120000802950008029516  ...                                               None
5                                                  01  ...                                               None
6                                                 003  ...                                               None
7                                                 012  ...                                               None
8                                           000080295  ...                                               None
9             AV. DE LAS AMERICAS 807 Y CALLE SEGUNDA  ...                                               None
10                                               None  ...                                               None
11                                               None  ...                                               None
12                                               None  ...                                               None
13                                               None  ...                                               None
14                                               None  ...                                               None

[15 rows x 5 columns]
>>> 

原始XML


<autorizacion><estado>PENDIENTE</estado><numeroAutorizacion>2201202101099065849800120030120000802950008029516</numeroAutorizacion><ambiente>PRODUCCIÓN</ambiente><comprobante><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?><factura id="comprobante" version="2.1.0">
  <infoTributaria>
    <ambiente>2</ambiente>
    <tipoEmision>1</tipoEmision>
    <razonSocial>INVERNEG S.A.</razonSocial>
    <ruc>0990658498001</ruc>
    <claveAcceso>2201202101099065849800120030120000802950008029516</claveAcceso>
    <codDoc>01</codDoc>
    <estab>003</estab>
    <ptoEmi>012</ptoEmi>
    <secuencial>000080295</secuencial>
    <dirMatriz>AV. DE LAS AMERICAS 807 Y CALLE SEGUNDA</dirMatriz>
  </infoTributaria>
  <infoFactura>
    <fechaEmision>22/01/2021</fechaEmision>
    <dirEstablecimiento>AV. 10 DE AGOSTO # 132 Y DE LOS CEREZOS</dirEstablecimiento>
    <contribuyenteEspecial>136</contribuyenteEspecial>
    <obligadoContabilidad>SI</obligadoContabilidad>
    <tipoIdentificacionComprador>04</tipoIdentificacionComprador>
    <razonSocialComprador>SANTOS ANDINO JOSE RODRIGO</razonSocialComprador>
    <identificacionComprador>1704484185001</identificacionComprador>
    <direccionComprador>AV. MARISCAL SUCRE S8-493 Y JOSE MENDOZA</direccionComprador>
    <totalSinImpuestos>84.15</totalSinImpuestos>
    <totalDescuento>0</totalDescuento>
    <totalConImpuestos>
      <totalImpuesto>
        <codigo>2</codigo>
        <codigoPorcentaje>2</codigoPorcentaje>
        <descuentoAdicional>0.00</descuentoAdicional>
        <baseImponible>84.15</baseImponible>
        <tarifa>12.00</tarifa>
        <valor>10.10</valor>
      </totalImpuesto>
    </totalConImpuestos>
    <propina>0.00</propina>
    <importeTotal>94.25</importeTotal>
    <moneda>DOLAR</moneda>
    <pagos>
      <pago>
        <formaPago>20</formaPago>
        <total>94.25</total>
        <plazo>30</plazo>
        <unidadTiempo>Dias</unidadTiempo>
      </pago>
    </pagos>
  </infoFactura>
  <detalles>
    <detalle>
      <codigoPrincipal>SH6607-XPL</codigoPrincipal>
      <descripcion>20K KM SYNTHETIC LF PH2876 Ford Mazda.</descripcion>
      <cantidad>34.00</cantidad>
      <precioUnitario>2.4750</precioUnitario>
      <descuento>0.00</descuento>
      <precioTotalSinImpuesto>84.15</precioTotalSinImpuesto>
      <impuestos>
        <impuesto>
          <codigo>2</codigo>
          <codigoPorcentaje>2</codigoPorcentaje>
          <tarifa>12.00</tarifa>
          <baseImponible>84.15</baseImponible>
          <valor>10.10</valor>
        </impuesto>
      </impuestos>
    </detalle>
  </detalles>
  <infoAdicional>
    <campoAdicional nombre="emailCliente">motozone25@gmail.com</campoAdicional>
    <campoAdicional nombre="OrdenCompra">NN</campoAdicional>
    <campoAdicional nombre="CodSociedad">Dynamics</campoAdicional>
    <campoAdicional nombre="CodInternoSAP">ivn</campoAdicional>
  </infoAdicional>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:etsi="http://uri.etsi.org/01903/v1.3.2#" Id="Signature260661">
<ds:SignedInfo Id="Signature-SignedInfo959896">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference Id="SignedPropertiesID72112" Type="http://uri.etsi.org/01903#SignedProperties" URI="#Signature260661-SignedProperties267295">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>2XMqZGYiZj19+ASI+0cw/ZpY32U=</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#Certificate1621720">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>7ypTHELgqKKlA36P9wVJ8tB+LLY=</ds:DigestValue>
</ds:Reference>
<ds:Reference Id="Reference-ID-24390" URI="#comprobante">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>IMXyzVuehrGVc8DIwS/O7z+yiEs=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue Id="SignatureValue783577">
e7j105IptFmzcpMNYsbkrByTaMnV1XPmnyJ69dXCCfifwooEKpHxiNDlimPYcfQV7ZpLJ4V5g4H1
CtobnB9U/GgKQF1uQz6uCFzyvyxp3P6TBg5iJ2Tbv4txCWu7OZBlQmbeilqVOkV15KAbVPZlqdxJ
XkJPvqRxxOVoPzidRbGWCZR9Q19lNdNEV8yHz4AtkpMWl3JtRi1k7n4aRPFDl1PC7nhcLWIuDXuD
sImgREjbGzY+PBoBw48DlSyXM/eABSBtwuZESSmYcC9k8ZWmD59VuFUqz1bFgb4LxhMTWjzNlLf2
CmbplKnqGZfaE6Kp+h0tJi6+7PFdlhm+dGNaCg==
</ds:SignatureValue>
<ds:KeyInfo Id="Certificate1621720">
<ds:X509Data>
<ds:X509Certificate>
MIIKFzCCB/+gAwIBAgIEW2EYeTANBgkqhkiG9w0BAQsFADCBoTELMAkGA1UEBhMCRUMxIjAgBgNV
BAoTGUJBTkNPIENFTlRSQUwgREVMIEVDVUFET1IxNzA1BgNVBAsTLkVOVElEQUQgREUgQ0VSVElG
SUNBQ0lPTiBERSBJTkZPUk1BQ0lPTi1FQ0lCQ0UxDjAMBgNVBAcTBVFVSVRPMSUwIwYDVQQDExxB
QyBCQU5DTyBDRU5UUkFMIERFTCBFQ1VBRE9SMB4XDTE5MDkyMzEzNDkyNFoXDTIxMDkyMzE0MTky
NFowgbYxCzAJBgNVBAYTAkVDMSIwIAYDVQQKExlCQU5DTyBDRU5UUkFMIERFTCBFQ1VBRE9SMTcw
NQYDVQQLEy5FTlRJREFEIERFIENFUlRJRklDQUNJT04gREUgSU5GT1JNQUNJT04tRUNJQkNFMQ4w
DAYDVQQHEwVRVUlUTzE6MBEGA1UEBRMKMDAwMDA5MTg5NjAlBgNVBAMTHkpVU1RPIEVOUklRVUUg
R09OWkFMRVogQUxNRUlEQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMqyjftcUein
EL0FI3Sc2um7sr2dhfuSdOhPgZQPwr64/0Du9Uo475cqS4oD3QyW8m4HK2OFsqiJr7Pp9DmqyuON
YX6nWrq8sdlRKoSnML2MDGgmHvEjBc/ezq/04vpcT7i8BWXQoe2Pk3mI2mPIWoimv91eg5euPYvv
UX+cF44kNE3KSBGsPezFyOB1FglFQxG2wlm8s6Yl4TJqvjo6NpTErpesugXntNEq2tlPoOtPt4cw
9BQ/buh7oDIP1HA0ilTioXkNqPY88elJYheuKJI/lPWM2+fBeXNVjTV7SIqJrPM5R+A8GLlWDYge
vOle5W9pwLvbx3r1+KYToqoSsx8CAwEAAaOCBT4wggU6MAsGA1UdDwQEAwIHgDBnBgNVHSAEYDBe
MFwGCysGAQQBgqg7AgIBME0wSwYIKwYBBQUHAgEWP2h0dHA6Ly93d3cuZWNpLmJjZS5lYy9wb2xp
dGljYS1jZXJ0aWZpY2Fkby9wZXJzb25hLWp1cmlkaWNhLnBkZjCBkQYIKwYBBQUHAQEEgYQwgYEw
PgYIKwYBBQUHMAGGMmh0dHA6Ly9vY3NwLmVjaS5iY2UuZWMvZWpiY2EvcHVibGljd2ViL3N0YXR1
cy9vY3NwMD8GCCsGAQUFBzABhjNodHRwOi8vb2NzcDEuZWNpLmJjZS5lYy9lamJjYS9wdWJsaWN3
ZWIvc3RhdHVzL29jc3AwGwYKKwYBBAGCqDsDCgQNEwtJTlZFUk5FRyBTQTAdBgorBgEEAYKoOwML
BA8TDTA5OTA2NTg0OTgwMDEwGgYKKwYBBAGCqDsDAQQMEwowOTA1MzMxMTc5MB0GCisGAQQBgqg7
AwIEDxMNSlVTVE8gRU5SSVFVRTAYBgorBgEEAYKoOwMDBAoTCEdPTlpBTEVaMBcGCisGAQQBgqg7
AwQECRMHQUxNRUlEQTAaBgorBgEEAYKoOwMFBAwTClBSRVNJREVOVEUwOgYKKwYBBAGCqDsDBwQs
EypBViBERSBMQVMgIEFNRVJJQ0FTICAgODA3IFkgQ0FMTEUgIFNFR1VOREEwGQYKKwYBBAGCqDsD
CAQLEwkwNDI2OTA4MDAwGQYKKwYBBAGCqDsDCQQLEwlHdWF5YXF1aWwwFwYKKwYBBAGCqDsDDAQJ
EwdFQ1VBRE9SMB0GCisGAQQBgqg7AzIEDxMNMDk5MDY1ODQ5ODAwMTAgBgorBgEEAYKoOwMzBBIT
EFNPRlRXQVJFLUFSQ0hJVk8wJgYDVR0RBB8wHYEbanVzdG8uZ29uemFsZXpAaW52ZXJuZWcuY29t
MIIB3wYDVR0fBIIB1jCCAdIwggHOoIIByqCCAcaGgdVsZGFwOi8vYmNlcWxkYXBzdWJwMS5iY2Uu
ZWMvY249Q1JMODQyLGNuPUFDJTIwQkFOQ08lMjBDRU5UUkFMJTIwREVMJTIwRUNVQURPUixsPVFV
SVRPLG91PUVOVElEQUQlMjBERSUyMENFUlRJRklDQUNJT04lMjBERSUyMElORk9STUFDSU9OLUVD
SUJDRSxvPUJBTkNPJTIwQ0VOVFJBTCUyMERFTCUyMEVDVUFET1IsYz1FQz9jZXJ0aWZpY2F0ZVJl
dm9jYXRpb25MaXN0P2Jhc2WGNGh0dHA6Ly93d3cuZWNpLmJjZS5lYy9DUkwvZWNpX2JjZV9lY19j
cmxmaWxlY29tYi5jcmykgbUwgbIxCzAJBgNVBAYTAkVDMSIwIAYDVQQKExlCQU5DTyBDRU5UUkFM
IERFTCBFQ1VBRE9SMTcwNQYDVQQLEy5FTlRJREFEIERFIENFUlRJRklDQUNJT04gREUgSU5GT1JN
QUNJT04tRUNJQkNFMQ4wDAYDVQQHEwVRVUlUTzElMCMGA1UEAxMcQUMgQkFOQ08gQ0VOVFJBTCBE
RUwgRUNVQURPUjEPMA0GA1UEAxMGQ1JMODQyMCsGA1UdEAQkMCKADzIwMTkwOTIzMTM0OTI0WoEP
MjAyMTA5MjMxNDE5MjRaMB8GA1UdIwQYMBaAFEii3yMfHfgsUXqMA81JMqUJwZSrMB0GA1UdDgQW
BBRo1dATwJqFbr5m83H1ebKUyJ296jAJBgNVHRMEAjAAMBkGCSqGSIb2fQdBAAQMMAobBFY4LjED
AgSwMA0GCSqGSIb3DQEBCwUAA4ICAQA5UfSwQYbsGAz9Ygq6AoBVFBvzrbG/ebqTM7DCnPh9C6vN
EgZ2LqfWENb05h0AdP+6lhVz6RXBhMKnoh9bfJkTDbBj6SOxOQkiVueUgrTHJOm45sTW2Rd6Sv/M
y7wleKR6muSWGOSILXvp3zxPjHklMfTRMsAYDpzRY0OhpOzKreJWXeI/BxAxrPW/D18BjwojKjeu
SsNd8PSMmye8ACJtZ05C6cZcljtM0Fu3YGRCW5rLR2U79OtKq7FFSGyPwXdzK5b4E0WgbHcEMmkY
h7n0IWxdhOyzfHdMGE+5NHef07/EWRKgyadtw6/TR4bcoXBBPyysvzmySx0iiAw0OGhLl86vxAC2
4Tj705j2LMYbIPrzUUuYQEpJ+FCwF6/n/DxYgjwURCIEq6GSSWRAdOXUVWgHoNfGRQ9I6K8BsFsI
6PKHZZ56SCwq/RvWwlpe2r622IunN9QiMgMt1WeYmVK4EzSiOh6Vr2tUyyYE3F9n2s+FEwXCtV/l
acFyRyoPopQo53Sj+BjanHAZ6NmMAqpDUgc8ZhSCXQ3U0OZlZGtxAjxtkoSPbdqMj+YeL4Ummo+I
85Cjcw4sBYSLjaPeQzEp5xYVI9Zxec4j3w6dygHv3z4rzjX7Hp5FT3gorEGgoB7Chwf6/O/tOhNJ
IHnbaAIJCeOVwlLyRJUAxRKagkcA8w==
</ds:X509Certificate>
</ds:X509Data>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
yrKN+1xR6KcQvQUjdJza6buyvZ2F+5J06E+BlA/Cvrj/QO71SjjvlypLigPdDJbybgcrY4WyqImv
s+n0OarK441hfqdauryx2VEqhKcwvYwMaCYe8SMFz97Or/Ti+lxPuLwFZdCh7Y+TeYjaY8haiKa/
3V6Dl649i+9Rf5wXjiQ0TcpIEaw97MXI4HUWCUVDEbbCWbyzpiXhMmq+Ojo2lMSul6y6Bee00Sra
2U+g60+3hzD0FD9u6HugMg/UcDSKVOKheQ2o9jzx6UliF64okj+U9Yzb58F5c1WNNXtIioms8zlH
4DwYuVYNiB686V7lb2nAu9vHevX4phOiqhKzHw==
</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
</ds:KeyInfo>
<ds:Object Id="Signature260661-Object151833"><etsi:QualifyingProperties Target="#Signature260661"><etsi:SignedProperties Id="Signature260661-SignedProperties267295"><etsi:SignedSignatureProperties><etsi:SigningTime>2021-01-22T17:39:56-05:00</etsi:SigningTime><etsi:SigningCertificate><etsi:Cert><etsi:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>m1xycXw93GXwQi44F/n8Fr4r2TM=</ds:DigestValue></etsi:CertDigest><etsi:IssuerSerial><ds:X509IssuerName>CN=AC BANCO CENTRAL DEL ECUADOR,L=QUITO,OU=ENTIDAD DE CERTIFICACION DE INFORMACION-ECIBCE,O=BANCO CENTRAL DEL ECUADOR,C=EC</ds:X509IssuerName><ds:X509SerialNumber>1533089913</ds:X509SerialNumber></etsi:IssuerSerial></etsi:Cert></etsi:SigningCertificate></etsi:SignedSignatureProperties><etsi:SignedDataObjectProperties><etsi:DataObjectFormat ObjectReference="#Reference-ID-24390"><etsi:Description>comprobante</etsi:Description><etsi:MimeType>text/xml</etsi:MimeType></etsi:DataObjectFormat></etsi:SignedDataObjectProperties></etsi:SignedProperties></etsi:QualifyingProperties></ds:Object></ds:Signature></factura>]]></comprobante></autorizacion>

 


Tags: orgnoneidhttpwwwdsdexml
1条回答
网友
1楼 · 发布于 2024-05-20 02:32:03

这只是部分解决办法

编辑:

我添加了使用递归获取所有子项、子项等的版本。
所以现在看来这是一个完整的解决方案


第一:find('detalle')搜索直接子节点'detalle',但不嵌套在其他节点中-即'detalles'。您需要使用xpath.//在所有节点中搜索

detalle = tree.find('.//detalle')

第二:subchild.text for subchild in child在直接子对象中搜索文本,但它不获取直接文本(即<codigoPrincipal>),也不获取嵌套子对象中的文本(即<impuestos>

对于<codigoPrincipal>您必须直接获取child.text,但是对于<impuestos> 您必须使用递归创建嵌套循环或函数。这个循环/递归在我的解决方案中还没有解决


代码:

from lxml import etree
import pandas as pd

tree = etree.parse('Factura 2.xml')
#root = tree.getroot()  # I don't need it. I can use directly `tree.find()`
invoice = tree.find('comprobante')  # instead of `root[3]

tree = etree.XML(invoice.text.encode())
detalle = tree.find('.//detalle')  # need `.//` to get nested element

# pass data to pandas dataframe (PEP8: one space after `#`)
data = dict()

print(' - children  -')

for child in detalle:
    column = child.tag
    text = child.text.strip()
    data[column] = [text]
    print(column, '=', text)

print(' - DataFrame  -')

df = pd.DataFrame(data).T  # Write in DF and transpose it  (PEP8: two spaces before `#`)
#df.to_excel('table.xlsx')
print(df)

结果:

 - children  -
codigoPrincipal = SH6607-XPL
descripcion = 20K KM SYNTHETIC LF PH2876 Ford Mazda.
cantidad = 34.00
precioUnitario = 2.4750
descuento = 0.00
precioTotalSinImpuesto = 84.15
impuestos = 
 - DataFrame  -
                                                             0
codigoPrincipal                                     SH6607-XPL
descripcion             20K KM SYNTHETIC LF PH2876 Ford Mazda.
cantidad                                                 34.00
precioUnitario                                          2.4750
descuento                                                 0.00
precioTotalSinImpuesto                                   84.15
impuestos         

它没有检查impuestos中的嵌套节点


编辑:

使用递归获取所有childrensubchildrensubsubchildren等的版本

from lxml import etree
import pandas as pd

#  - functions  -

def get_all_children(node):
    data = dict()
    
    for child in node:
        tag = child.tag
        text = child.text
        if text:
            text = text.strip()
        if text:
            data[tag] = [text]
        data.update(get_all_children(child))
        
    return data

#  - main  -

tree = etree.parse('Factura 2.xml')
#root = tree.getroot()
invoice = tree.find('comprobante')

tree = etree.XML(invoice.text.encode())
detalle = tree.find('.//detalle')  # need `.//` to get nested element

print(' - children  -')

# data = get_all_children(tree)
data = get_all_children(detalle)

for key, value in data.items():
    print(key, '=', value)

print(' - DataFrame  -')

df = pd.DataFrame(data).T
print(df)

get_all_children(detalle)的结果:

 - children  -
codigoPrincipal = ['SH6607-XPL']
descripcion = ['20K KM SYNTHETIC LF PH2876 Ford Mazda.']
cantidad = ['34.00']
precioUnitario = ['2.4750']
descuento = ['0.00']
precioTotalSinImpuesto = ['84.15']
codigo = ['2']
codigoPorcentaje = ['2']
tarifa = ['12.00']
baseImponible = ['84.15']
valor = ['10.10']
 - DataFrame  -
                                                             0
codigoPrincipal                                     SH6607-XPL
descripcion             20K KM SYNTHETIC LF PH2876 Ford Mazda.
cantidad                                                 34.00
precioUnitario                                          2.4750
descuento                                                 0.00
precioTotalSinImpuesto                                   84.15
codigo                                                       2
codigoPorcentaje                                             2
tarifa                                                   12.00
baseImponible                                            84.15
valor                                                    10.10

get_all_children(tree)的结果

 - DataFrame  -
                                                                                                    0
ambiente                                                                                            2
tipoEmision                                                                                         1
razonSocial                                                                             INVERNEG S.A.
ruc                                                                                     0990658498001
claveAcceso                                         2201202101099065849800120030120000802950008029516
codDoc                                                                                             01
estab                                                                                             003
ptoEmi                                                                                            012
secuencial                                                                                  000080295
dirMatriz                                                     AV. DE LAS AMERICAS 807 Y CALLE SEGUNDA
fechaEmision                                                                               22/01/2021
dirEstablecimiento                                            AV. 10 DE AGOSTO # 132 Y DE LOS CEREZOS
contribuyenteEspecial                                                                             136
obligadoContabilidad                                                                               SI
tipoIdentificacionComprador                                                                        04
razonSocialComprador                                                       SANTOS ANDINO JOSE RODRIGO
identificacionComprador                                                                 1704484185001
direccionComprador                                           AV. MARISCAL SUCRE S8-493 Y JOSE MENDOZA
totalSinImpuestos                                                                               84.15
totalDescuento                                                                                      0
codigo                                                                                              2
codigoPorcentaje                                                                                    2
descuentoAdicional                                                                               0.00
baseImponible                                                                                   84.15
tarifa                                                                                          12.00
valor                                                                                           10.10
propina                                                                                          0.00
importeTotal                                                                                    94.25
moneda                                                                                          DOLAR
formaPago                                                                                          20
total                                                                                           94.25
plazo                                                                                              30
unidadTiempo                                                                                     Dias
codigoPrincipal                                                                            SH6607-XPL
descripcion                                                    20K KM SYNTHETIC LF PH2876 Ford Mazda.
cantidad                                                                                        34.00
precioUnitario                                                                                 2.4750
descuento                                                                                        0.00
precioTotalSinImpuesto                                                                          84.15
campoAdicional                                                                                    ivn
{http://www.w3.org/2000/09/xmldsig#}DigestValue                          m1xycXw93GXwQi44F/n8Fr4r2TM=
{http://www.w3.org/2000/09/xmldsig#}SignatureValue  e7j105IptFmzcpMNYsbkrByTaMnV1XPmnyJ69dXCCfifwo...
{http://www.w3.org/2000/09/xmldsig#}X509Certifi...  MIIKFzCCB/+gAwIBAgIEW2EYeTANBgkqhkiG9w0BAQsFAD...
{http://www.w3.org/2000/09/xmldsig#}Modulus         yrKN+1xR6KcQvQUjdJza6buyvZ2F+5J06E+BlA/Cvrj/QO...
{http://www.w3.org/2000/09/xmldsig#}Exponent                                                     AQAB
{http://uri.etsi.org/01903/v1.3.2#}SigningTime                              2021-01-22T17:39:56-05:00
{http://www.w3.org/2000/09/xmldsig#}X509IssuerName  CN=AC BANCO CENTRAL DEL ECUADOR,L=QUITO,OU=ENT...
{http://www.w3.org/2000/09/xmldsig#}X509SerialN...                                         1533089913
{http://uri.etsi.org/01903/v1.3.2#}Description                                            comprobante
{http://uri.etsi.org/01903/v1.3.2#}MimeType                                                  text/xml

相关问题 更多 >