您将如何在Python中解析XML?

时间:2014-09-17 20:42:05

标签: python xml parsing

我有这个巨大的XML,我想解析它以取出一个特定的节点<ORGNR></ORGNR>

我将如何在Python中执行此操作。我读过有关xml.etree.cElementTree的内容。有没有简单的方法呢?

请参阅下面的整个XML:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap:Body>
      <GetDataBySecureResponse xmlns="https://webservice.creditsafe.se/getdata/">
         <GetDataBySecureResult>
            <SearchNumber>8888</SearchNumber>
            <TransactionId />
            <Error>
               <Cause_of_Reject>15</Cause_of_Reject>
               <Reject_text>Ingen träff</Reject_text>
               <Reject_comment />
            </Error>
            <Block_Name>QVIDO_C_CREDIT</Block_Name>
            <Parameters>
               <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
                  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                     <xs:complexType>
                        <xs:choice minOccurs="0" maxOccurs="unbounded">
                           <xs:element name="GETDATA_RESPONSE">
                              <xs:complexType>
                                 <xs:sequence>
                                    <xs:element name="ORGNR" type="xs:string" minOccurs="0" />
                                    <xs:element name="NAME" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMPANY_TYPE" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMPANY_TYPE_TEXT" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMMERCIAL_BLOCK" type="xs:string" minOccurs="0" />
                                    <xs:element name="ADDRESS" type="xs:string" minOccurs="0" />
                                    <xs:element name="ZIPCODE" type="xs:string" minOccurs="0" />
                                    <xs:element name="TOWN" type="xs:string" minOccurs="0" />
                                    <xs:element name="TELEPHONE" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMMUNITY" type="xs:string" minOccurs="0" />
                                    <xs:element name="REGION" type="xs:string" minOccurs="0" />
                                    <xs:element name="EMAIL_ADRESS" type="xs:string" minOccurs="0" />
                                    <xs:element name="WWW_ADRESS" type="xs:string" minOccurs="0" />
                                    <xs:element name="RATING" type="xs:string" minOccurs="0" />
                                    <xs:element name="RATING_TEXT" type="xs:string" minOccurs="0" />
                                    <xs:element name="SHARE_CAPITAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="BRANSCH" type="xs:string" minOccurs="0" />
                                    <xs:element name="F-TAX" type="xs:string" minOccurs="0" />
                                    <xs:element name="MOMS" type="xs:string" minOccurs="0" />
                                    <xs:element name="EMP_TAX" type="xs:string" minOccurs="0" />
                                    <xs:element name="BRANSCH_TEXT" type="xs:string" minOccurs="0" />
                                    <xs:element name="LIMIT" type="xs:string" minOccurs="0" />
                                    <xs:element name="ANTAL_ANM" type="xs:string" minOccurs="0" />
                                    <xs:element name="ANTAL_ANSOKAN" type="xs:string" minOccurs="0" />
                                    <xs:element name="SUM_ANM" type="xs:string" minOccurs="0" />
                                    <xs:element name="SUM_ANSOKAN" type="xs:string" minOccurs="0" />
                                    <xs:element name="ANTAL_ANM_AMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="ANTAL_ANM_EMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="SUM_ANM_AMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="SUM_ANM_EMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="ACCOUNT_PERIOD" type="xs:string" minOccurs="0" />
                                    <xs:element name="NR_EMPLOYEES" type="xs:string" minOccurs="0" />
                                    <xs:element name="KF_DEBT" type="xs:string" minOccurs="0" />
                                    <xs:element name="KF_DEBT_DATE" type="xs:string" minOccurs="0" />
                                    <xs:element name="KF_DEBT_NR_AMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="KF_DEBT_NR_EMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="KF_DEBT_SUM_AMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="KF_DEBT_SUM_EMAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="GROUPMOTHER_ORGNR" type="xs:string" minOccurs="0" />
                                    <xs:element name="GROUPMOTHER_NAME" type="xs:string" minOccurs="0" />
                                    <xs:element name="INCORPORATION_DATE" type="xs:string" minOccurs="0" />
                                    <xs:element name="INTJANINGSFORMAGA" type="xs:string" minOccurs="0" />
                                    <xs:element name="SOLIDITET" type="xs:string" minOccurs="0" />
                                    <xs:element name="RANTETACKNINGSGRAD" type="xs:string" minOccurs="0" />
                                    <xs:element name="SKULDSATTNINGSGRAD" type="xs:string" minOccurs="0" />
                                    <xs:element name="BALANSLIKVIDITET" type="xs:string" minOccurs="0" />
                                    <xs:element name="NET_PROFIT" type="xs:string" minOccurs="0" />
                                    <xs:element name="REVENUE" type="xs:string" minOccurs="0" />
                                    <xs:element name="PROFIT_DEPRICIATION" type="xs:string" minOccurs="0" />
                                    <xs:element name="PROFIT_AFTER_TAX" type="xs:string" minOccurs="0" />
                                    <xs:element name="CURRENT_ASSETS" type="xs:string" minOccurs="0" />
                                    <xs:element name="FIXT_EQUIP" type="xs:string" minOccurs="0" />
                                    <xs:element name="SHORT_TERM_LIABS" type="xs:string" minOccurs="0" />
                                    <xs:element name="LONG_TERM_LIABS" type="xs:string" minOccurs="0" />
                                    <xs:element name="NON_TAX_RESERV" type="xs:string" minOccurs="0" />
                                    <xs:element name="EQUITY" type="xs:string" minOccurs="0" />
                                    <xs:element name="TOTAL_CAPITAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="REVISON_APPROVED" type="xs:string" minOccurs="0" />
                                    <xs:element name="INVENTORY" type="xs:string" minOccurs="0" />
                                    <xs:element name="QUICK_RATIO" type="xs:string" minOccurs="0" />
                                    <xs:element name="NET_TURNOVER" type="xs:string" minOccurs="0" />
                                    <xs:element name="UNIT_NR" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMPANY_SIGN" type="xs:string" minOccurs="0" />
                                    <xs:element name="INVESTIGATE" type="xs:string" minOccurs="0" />
                                    <xs:element name="CEO_PNR" type="xs:string" minOccurs="0" />
                                    <xs:element name="CEO_NAME" type="xs:string" minOccurs="0" />
                                    <xs:element name="NON_LTD_OWNER_PNR" type="xs:string" minOccurs="0" />
                                    <xs:element name="NON_LTD_OWNER_NAME" type="xs:string" minOccurs="0" />
                                    <xs:element name="EQUITY_SHARE" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMPANY_STATUS" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMPANY_STATUS_DATE" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMPANY_ACTIVE" type="xs:string" minOccurs="0" />
                                    <xs:element name="TURNOVER_INTERVAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_TYPE" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_DATE" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_TEXT" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_NAME" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_FIRM" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_PHONENODIR" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_PHONENOCENTRAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_VISIT_ADDRESS" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_BOX_ADDRESS" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_POST_CODE" type="xs:string" minOccurs="0" />
                                    <xs:element name="BANKRUPTCY_ADM_POST_TOWN" type="xs:string" minOccurs="0" />
                                    <xs:element name="COMPANY_STATUS_CODE" type="xs:string" minOccurs="0" />
                                    <xs:element name="ACTIVITY_TEXT" type="xs:string" minOccurs="0" />
                                    <xs:element name="ANTAL_ANM_EMAL1" type="xs:string" minOccurs="0" />
                                    <xs:element name="ANTAL_ANM_AMAL1" type="xs:string" minOccurs="0" />
                                    <xs:element name="NUMBER_REALESTATE" type="xs:string" minOccurs="0" />
                                    <xs:element name="NUMBER_BUILDINGS" type="xs:string" minOccurs="0" />
                                    <xs:element name="ASSESSED_VALUE_TOTAL" type="xs:string" minOccurs="0" />
                                    <xs:element name="AVERAGE_OWNED_PART_PERCENT" type="xs:string" minOccurs="0" />
                                    <xs:element name="ASSESSED_VALUE_BUILDING" type="xs:string" minOccurs="0" />
                                    <xs:element name="ASSESSED_VALUE_LAND" type="xs:string" minOccurs="0" />
                                    <xs:element name="ASSESSED_VALUE_OWNED_PART" type="xs:string" minOccurs="0" />
                                    <xs:element name="PAY_DBT" type="xs:string" minOccurs="0" />
                                    <xs:element name="PAY_INVOICES_AVG_VALUE" type="xs:string" minOccurs="0" />
                                    <xs:element name="PAY_INVOICES_TOT_AVAILABLE" type="xs:string" minOccurs="0" />
                                    <xs:element name="PAY_INVOICES_PAID" type="xs:string" minOccurs="0" />
                                    <xs:element name="PAY_INVOICES_OUTSTANDING" type="xs:string" minOccurs="0" />
                                 </xs:sequence>
                              </xs:complexType>
                           </xs:element>
                        </xs:choice>
                     </xs:complexType>
                  </xs:element>
               </xs:schema>
               <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                  <NewDataSet xmlns="">
                     <GETDATA_RESPONSE diffgr:id="GETDATA_RESPONSE1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
                        <ORGNR>Organisationsnummer</ORGNR>
                        <NAME>Företagsnamn</NAME>
                        <COMPANY_TYPE>Juridisk bolagsform, kod</COMPANY_TYPE>
                        <COMPANY_TYPE_TEXT>Juridisk bolagsform, text</COMPANY_TYPE_TEXT>
                        <COMMERCIAL_BLOCK>Reklamspärr (Ja/Nej)</COMMERCIAL_BLOCK>
                        <ADDRESS>C/O adress och adress</ADDRESS>
                        <ZIPCODE>Postnummer</ZIPCODE>
                        <TOWN>Postort</TOWN>
                        <TELEPHONE>Telefonnummer</TELEPHONE>
                        <COMMUNITY>Säte kommun</COMMUNITY>
                        <REGION>Säte län</REGION>
                        <EMAIL_ADRESS>E-postadress</EMAIL_ADRESS>
                        <WWW_ADRESS>Webbadress</WWW_ADRESS>
                        <RATING>Rating, poäng</RATING>
                        <RATING_TEXT>Rating, text</RATING_TEXT>
                        <SHARE_CAPITAL>Aktiekapital (SEK)</SHARE_CAPITAL>
                        <BRANSCH>Huvudbransch, kod</BRANSCH>
                        <F-TAX>F-skatt (Ja/Nej)</F-TAX>
                        <MOMS>Moms (Ja/Nej)</MOMS>
                        <EMP_TAX>Arbetsgivaravgift (Ja/Nej)</EMP_TAX>
                        <BRANSCH_TEXT>Huvudbransch, text</BRANSCH_TEXT>
                        <LIMIT>Limit (SEK)</LIMIT>
                        <ANTAL_ANM>Betalningsanmärkningar A-mål och E-mål, Tot. antal</ANTAL_ANM>
                        <ANTAL_ANSOKAN>Betalningsansökningar, Tot. antal</ANTAL_ANSOKAN>
                        <SUM_ANM>Betalningsanmärkningar A-mål och E-mål, Tot. summa (SEK)</SUM_ANM>
                        <SUM_ANSOKAN>Betalningsansökningar, Tot. summa (SEK)</SUM_ANSOKAN>
                        <ANTAL_ANM_AMAL>Betalningsanmärkningar A-mål, Tot. antal</ANTAL_ANM_AMAL>
                        <ANTAL_ANM_EMAL>Betalningsanmärkningar E-mål, Tot. antal</ANTAL_ANM_EMAL>
                        <SUM_ANM_AMAL>Betalningsanmärkningar A-mål, Tot. summa (SEK)</SUM_ANM_AMAL>
                        <SUM_ANM_EMAL>Betalningsanmärkningar E-mål, Tot. summa (SEK)</SUM_ANM_EMAL>
                        <ACCOUNT_PERIOD>Bokslutsperiod</ACCOUNT_PERIOD>
                        <NR_EMPLOYEES>Anställda, antal</NR_EMPLOYEES>
                        <KF_DEBT>Skuldsaldo A-mål och E-mål, Tot. summa (SEK)</KF_DEBT>
                        <KF_DEBT_DATE>Skuldsaldo, datum</KF_DEBT_DATE>
                        <KF_DEBT_NR_AMAL>Skuldsaldo A-mål, antal</KF_DEBT_NR_AMAL>
                        <KF_DEBT_NR_EMAL>Skuldsaldo E-mål, antal</KF_DEBT_NR_EMAL>
                        <KF_DEBT_SUM_AMAL>Skuldsaldo A-mål, summa (SEK)</KF_DEBT_SUM_AMAL>
                        <KF_DEBT_SUM_EMAL>Skuldsaldo E-mål, summa (SEK)</KF_DEBT_SUM_EMAL>
                        <GROUPMOTHER_ORGNR>Koncernmoder, organisationsnummer</GROUPMOTHER_ORGNR>
                        <GROUPMOTHER_NAME>Koncernmoder, namn</GROUPMOTHER_NAME>
                        <INCORPORATION_DATE>Registeringsdatum</INCORPORATION_DATE>
                        <INTJANINGSFORMAGA>Nettomarginal (%)</INTJANINGSFORMAGA>
                        <SOLIDITET>Soliditet (%)</SOLIDITET>
                        <RANTETACKNINGSGRAD>Räntetäckningsgrad (%)</RANTETACKNINGSGRAD>
                        <SKULDSATTNINGSGRAD>Skuldsättningsgrad (%)</SKULDSATTNINGSGRAD>
                        <BALANSLIKVIDITET>Balanslikviditet i ggr, (avrundat decimalt värde)</BALANSLIKVIDITET>
                        <NET_PROFIT>Årets resultat (KSEK)</NET_PROFIT>
                        <REVENUE>Summa intäkter (KSEK)</REVENUE>
                        <PROFIT_DEPRICIATION>Resultat efter avskrivningar (KSEK)</PROFIT_DEPRICIATION>
                        <PROFIT_AFTER_TAX>Resultat efter finansiella poster (KSEK)</PROFIT_AFTER_TAX>
                        <CURRENT_ASSETS>Omsättningstillgångar (KSEK)</CURRENT_ASSETS>
                        <FIXT_EQUIP>Anläggningstillgångar (KSEK)</FIXT_EQUIP>
                        <SHORT_TERM_LIABS>Summa kortfristiga skulder (KSEK)</SHORT_TERM_LIABS>
                        <LONG_TERM_LIABS>Summa långfristiga skulder (KSEK)</LONG_TERM_LIABS>
                        <NON_TAX_RESERV>Obeskattade reserver (KSEK)</NON_TAX_RESERV>
                        <EQUITY>Summa eget kapital (KSEK)</EQUITY>
                        <TOTAL_CAPITAL>Balansomslutning (KSEK)</TOTAL_CAPITAL>
                        <REVISON_APPROVED>Revisionsberättelse tillstyrkt (Ja/Nej)</REVISON_APPROVED>
                        <INVENTORY>Varulager (KSEK)</INVENTORY>
                        <QUICK_RATIO>Kassalikviditet (%)</QUICK_RATIO>
                        <NET_TURNOVER>Nettoomsättning (KSEK)</NET_TURNOVER>
                        <UNIT_NR>Arbetsställen, antal enheter</UNIT_NR>
                        <COMPANY_SIGN>Firmatecknare</COMPANY_SIGN>
                        <INVESTIGATE>Utmätningsförsök (Ja/Nej)</INVESTIGATE>
                        <CEO_PNR>VD, personnummer</CEO_PNR>
                        <CEO_NAME>VD, namn</CEO_NAME>
                        <NON_LTD_OWNER_PNR>Innehavare av enskild firma, personnummer</NON_LTD_OWNER_PNR>
                        <NON_LTD_OWNER_NAME>Innehavare enskild firma, namn</NON_LTD_OWNER_NAME>
                        <EQUITY_SHARE>Eget kapital av aktiekapital (%)</EQUITY_SHARE>
                        <COMPANY_STATUS>Företagets status, text</COMPANY_STATUS>
                        <COMPANY_STATUS_DATE>Företagets status, datum</COMPANY_STATUS_DATE>
                        <COMPANY_ACTIVE>Företag status (Aktivt/Ej aktivt)</COMPANY_ACTIVE>
                        <TURNOVER_INTERVAL>Omsättningsintervall (KSEK)</TURNOVER_INTERVAL>
                        <BANKRUPTCY_TYPE>Aktuellt konkursläge, typ</BANKRUPTCY_TYPE>
                        <BANKRUPTCY_DATE>Aktuellt konkursläge, datum för senaste ändring</BANKRUPTCY_DATE>
                        <BANKRUPTCY_TEXT>Aktuellt konkursläge, text</BANKRUPTCY_TEXT>
                        <BANKRUPTCY_ADM_NAME>Konkursförvaltare, namn</BANKRUPTCY_ADM_NAME>
                        <BANKRUPTCY_ADM_FIRM>Konkursförvaltare, firma</BANKRUPTCY_ADM_FIRM>
                        <BANKRUPTCY_ADM_PHONENODIR>Konkursförvaltare, direktnummer</BANKRUPTCY_ADM_PHONENODIR>
                        <BANKRUPTCY_ADM_PHONENOCENTRAL>Konkursförvaltare, växelnummer</BANKRUPTCY_ADM_PHONENOCENTRAL>
                        <BANKRUPTCY_ADM_VISIT_ADDRESS>Konkursförvaltare, besöksadress</BANKRUPTCY_ADM_VISIT_ADDRESS>
                        <BANKRUPTCY_ADM_BOX_ADDRESS>Konkursförvaltare, boxadress</BANKRUPTCY_ADM_BOX_ADDRESS>
                        <BANKRUPTCY_ADM_POST_CODE>Konkursförvaltare, postnummer</BANKRUPTCY_ADM_POST_CODE>
                        <BANKRUPTCY_ADM_POST_TOWN>Konkursförvaltare, postort</BANKRUPTCY_ADM_POST_TOWN>
                        <COMPANY_STATUS_CODE>Företagets status, kod</COMPANY_STATUS_CODE>
                        <ACTIVITY_TEXT>Företagets verksamhetsbeskrivning (källa: bolagsordning)</ACTIVITY_TEXT>
                        <ANTAL_ANM_EMAL1>Betalningsanmärkningar E-mål samt Tredskodomar, antal senaste 12 månaderna</ANTAL_ANM_EMAL1>
                        <ANTAL_ANM_AMAL1>Betalningsanmärkningar A-mål, antal senaste 12 månaderna</ANTAL_ANM_AMAL1>
                        <NUMBER_REALESTATE>Antal Fastigheter</NUMBER_REALESTATE>
                        <NUMBER_BUILDINGS>Antal Byggnader</NUMBER_BUILDINGS>
                        <ASSESSED_VALUE_TOTAL>Totalt Taxeringsvärde</ASSESSED_VALUE_TOTAL>
                        <AVERAGE_OWNED_PART_PERCENT>Genomsnittlig ägd del %</AVERAGE_OWNED_PART_PERCENT>
                        <ASSESSED_VALUE_BUILDING>Taxeringsvärde byggnad</ASSESSED_VALUE_BUILDING>
                        <ASSESSED_VALUE_LAND>Taxeringsvärde Mark</ASSESSED_VALUE_LAND>
                        <ASSESSED_VALUE_OWNED_PART>Taxeringsvärde ägd del</ASSESSED_VALUE_OWNED_PART>
                        <PAY_DBT>Detta företag</PAY_DBT>
                        <PAY_INVOICES_AVG_VALUE>Genomsnittligt fakturabelopp</PAY_INVOICES_AVG_VALUE>
                        <PAY_INVOICES_TOT_AVAILABLE>Tillgängliga fakturor</PAY_INVOICES_TOT_AVAILABLE>
                        <PAY_INVOICES_PAID>Betalda fakturor</PAY_INVOICES_PAID>
                        <PAY_INVOICES_OUTSTANDING>Utestående fakturor</PAY_INVOICES_OUTSTANDING>
                     </GETDATA_RESPONSE>
                  </NewDataSet>
               </diffgr:diffgram>
            </Parameters>
         </GetDataBySecureResult>
      </GetDataBySecureResponse>
   </soap:Body>
</soap:Envelope>

2 个答案:

答案 0 :(得分:1)

您还可以使用Python标准库中的 xml.etree.ElementTree

代码:

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
for e in root.findall('.//ORGNR'):
    print e.text

答案 1 :(得分:0)

我真的推荐lxml在python中使用xml

#!/usr/bin/env python
#python2.7
from lxml import etree as e
import sys


def main():
    #1. get file name from stdin
    fn = sys.argv[1]

    #2. parse file
    tree = e.parse(fn)

    #3. find all ORGNR elements
    orgnr_elms = tree.xpath('.//ORGNR')

    #4. iterate through them
    for orgnr in orgnr_elms:
        #5. remove each one
        orgnr.getparent().remove(orgnr)

    #6. Print to stdout
    print e.tostring(tree, pretty_print=True, xml_declaration=True, encoding="UTF-8")

if __name__ == '__main__':
    main()

像这样使用它:

./pase.py input.xml > output.xml