簡體   English   中英

將XML解析為類似於suds的Python對象

[英]Parsing XML to Python object similar to suds

很抱歉,如果這是重復的,但是我嘗試挖掘Internet,卻沒有真正找到相關的東西。

我一直在使用肥皂水,從它可以將結果解析為對象(除了元素樹之外)的意義上來說,這是很棒的。

現在,我有一個非常類似於SOAP響應的文件(沒有信封等),我想知道是否有一種簡單的方法可以將其解析為類似suds的對象。 標簽帶有它們的ns。 這是一個示例TAG,使用ElementTree進行了解析和美化:

<?xml version="1.0" ?>
<ns0:substation objectID="{16A743D9-AAA3-4187-94BF-77F63E25E5A6}" verb="New" xmlns:ns0="http://www.multispeak.org/Version_3.0">
  <ns0:extensions>
    <ns0:symbolCoord>
      <ns0:X>332.50187386</ns0:X>
      <ns0:Y>343.8680783</ns0:Y>
    </ns0:symbolCoord>
  </ns0:extensions>
  <ns0:mapLocation>
    <ns0:coord>
      <ns0:X>111.50187386</ns0:X>
      <ns0:Y>11.8680783</ns0:Y>
    </ns0:coord>
  </ns0:mapLocation>
  <ns0:facilityID>07xx</ns0:facilityID>
  <ns0:sectionID>07xx</ns0:sectionID>
  <ns0:parentSectionID name="ROOT" noun="substation" objectID="{00000001-0000-0000-0000-000000000000}"/>
  <ns0:phaseCode>ABC</ns0:phaseCode>
  <ns0:zMin>xx</ns0:zMin>
  <ns0:zMax>xx</ns0:zMax>
  <ns0:units>Ohms</ns0:units>
  <ns0:posSeqZ r="8.60217666625977" x="32.0800704956055"/>
  <ns0:zeroSeqZ r="11.5711364746094" x="44.1044578552246"/>
  <ns0:negSeqZ r="8.60217666625977" x="32.0800704956055"/>
  <ns0:busVolts>1.03332996368408</ns0:busVolts>
  <ns0:ohGndZ>40</ns0:ohGndZ>
  <ns0:ugGndZ>10</ns0:ugGndZ>
  <ns0:nomVolts>69.0001009674624</ns0:nomVolts>
  <ns0:ldAolloc>false</ns0:ldAolloc>
  <ns0:ldCon>D</ns0:ldCon>
  <ns0:isRegulated>false</ns0:isRegulated>
  <ns0:feederList/>
  <ns0:name>07xx</ns0:name>
</ns0:substation>

除了:有沒有比原始xml上的正則表達式/字符串替換更好的方法來替換所有標簽的ns0 url?

更新:這是文件的(修剪)內容:

<MultiSpeakMsgHeader Version="3.0" AppName="XXX" AppVersion="8.1.3.2741.988695b6" Company="XX" xmlns="http://www.multispeak.org/Version_3.0" SessionID="1" PreviousSessionID="1" ObjectsRemaining="0">
    <MultiSpeak documentType="dump" connectivityModel="Sectional">
        <substation objectID="{16A743D9-AAA3-4187-94BF-77F63E25E5A6}" verb="New">
            <extensions>
                <symbolCoord>
                    <X>0.50187386</X><Y>0.8680783</Y>
                </symbolCoord>
            </extensions>
            <mapLocation>
                <coord>
                    <X>0.50187386</X><Y>0.8680783</Y>
                </coord>
            </mapLocation>
            <facilityID>07xx</facilityID>
            <sectionID>07xx</sectionID>
            <parentSectionID name="ROOT" noun="substation" objectID="{00000001-0000-0000-0000-000000000000}"/>
            <phaseCode>ABC</phaseCode>
            <zMin>X0X</zMin>
            <zMax>X0X</zMax>
            <units>Ohms</units>
            <posSeqZ r="8.60217666625977" x="32.0800704956055"/>
            <zeroSeqZ r="11.5711364746094" x="44.1044578552246"/>
            <negSeqZ r="8.60217666625977" x="32.0800704956055"/>
            <busVolts>1.03332996368408</busVolts>
            <ohGndZ>40</ohGndZ>
            <ugGndZ>10</ugGndZ>
            <nomVolts>69.0001009674624</nomVolts>
            <ldAolloc>false</ldAolloc>
            <ldCon>D</ldCon>
            <isRegulated>false</isRegulated>
            <feederList/>
            <name>07xx (X0X)</name>
        </substation>
        <transformerBank objectID="{15EF1495-4D7B-4A30-A6D5-1B5CB2314A78}" verb="New">
            <extensions>
                <symbolCoord>
                    <X>0.86176248</X><Y>0.7434433</Y>
                </symbolCoord>
            </extensions>
            <mapLocation>
                <coord>
                    <X>0.50187386</X><Y>0.8680783</Y>
                </coord>
            </mapLocation>
            <facilityID>MXFMR070</facilityID>
            <sectionID>MXFMR070</sectionID>
            <parentSectionID name="07xx (X0X)" noun="substation" objectID="{16A743D9-AAA3-4187-94BF-77F63E25E5A6}"/>
            <phaseCode>ABC</phaseCode>
            <wdgCode>D-Y</wdgCode>
            <vInput>67.0000535137532</vInput>
            <vOut>7.19999980926514</vOut>
            <tertVolts>0</tertVolts>
            <tertChild name="MXFMR070" noun="transformerBank" objectID="{15EF1495-4D7B-4A30-A6D5-1B5CB2314A78}"/>
            <vOutNom>7.19999980926514</vOutNom>
            <vOutNomTertiary>0</vOutNomTertiary>
            <transformerList>
                <transformer objectID="{15EF1495-4D7B-4A30-A6D5-1B5CB2314A78}-ABC">
                    <kva>4750</kva>
                    <phases>3</phases>
                    <phase>ABC</phase>
                    <impedance>10.7299995422363</impedance>
                    <nLLoss>0</nLLoss>
                    <eaEquipment>519-X0X070</eaEquipment>
                </transformer>
            </transformerList>
        </transformerBank>
        <ohPrimaryLine objectID="{21EC1A14-276F-48EB-8955-80C0EF921CEB}" verb="New">
            <extensions>
                <note>LINE IS NOT HOT, JUMPERS CUT,  NO FUSES ON POLE</note>
            </extensions>
            <complexLine>
                <coord>
                    <X>0.37190654</X><Y>0.9178412</Y>
                </coord>
                <coord>
                    <X>0.78998409</X><Y>0.5761478</Y>
                </coord>
            </complexLine>
            <sectionID>OH19244</sectionID>
            <parentSectionID name="ROOT" noun="substation" objectID="{00000001-0000-0000-0000-000000000000}"/>
            <phaseCode>A</phaseCode>
            <conductorList>
                <conductor>
                    <conductorType>#4 ACSR 6/1</conductorType>
                    <phase>A</phase>
                </conductor>
            </conductorList>
            <condN>#4 ACSR 6/1</condN>
            <condLength>415.600311279297</condLength>
            <constr>SystemCnstDefault</constr>
            <operVolt>7.19999980926514</operVolt>
        </ohPrimaryLine>
        <ohPrimaryLine objectID="{69B06530-99C3-4056-8929-D6E5583911AE}" verb="New">
            <complexLine>
                <coord>
                    <X>0.78998409</X><Y>0.5761478</Y>
                </coord>
                <coord>
                    <X>0.00206882</X><Y>0.0113029</Y>
                </coord>
            </complexLine>
            <sectionID>OH19245</sectionID>
            <parentSectionID name="OH19244" noun="ohPrimaryLine" objectID="{21EC1A14-276F-48EB-8955-80C0EF921CEB}"/>
            <phaseCode>A</phaseCode>
            <conductorList>
                <conductor>
                    <conductorType>#4 ACSR 6/1</conductorType>
                    <phase>A</phase>
                </conductor>
            </conductorList>
            <condN>#4 ACSR 6/1</condN>
            <condLength>422.347900390625</condLength>
            <constr>SystemCnstDefault</constr>
            <operVolt>7.19999980926514</operVolt>
        </ohPrimaryLine>
    </MultiSpeak>
</MultiSpeakMsgHeader>

最快的方法是使用“ lxml.objectify”:

from lxml import objectify
o= objectify.fromstring(xml)

參考: http : //lxml.de/objectify.html#element-access-through-object-attributes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM