在Python中解析XML Envelope

时间:2013-02-20 09:28:44

标签: python xml soap

我有来自SOAP的回复:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
 <env:Body>
  <env:Fault>
   <env:Code>
    <env:Value>env:Receiver</env:Value>
    <env:Subcode>
     <env:Value>-10</env:Value>
    </env:Subcode>
   </env:Code>
   <env:Reason>
    <env:Text xml:lang="en">10001069 - Item 804006 not active </env:Text>
   </env:Reason>
   <env:Detail>
    <Object xmlns="">17</Object>
    <ObjectIndex xmlns="">1</ObjectIndex>
    <Command xmlns="">AddObject</Command>
    <SessionID xmlns="">58711</SessionID>
   </env:Detail>
  </env:Fault>
 </env:Body>
</env:Envelope>

我想访问/知道标记Reason,就像在python中一样:print ObjectXML.Body.Reason.Text 例如,我想在节点内部使用点符号。 我是怎么做到的?。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用cElement API根据python对象获取XML标记的句柄,然后使用以下activestate配方将XML转换为dict表示(仅适用于较小的XML文件,配方中的代码可能需要一些修改)。

import xml.etree.cElementTree as ElementTree
import XmlDictConfig as XmlDictConfig

if __name__ == "__main__":
  string_containing_my_xml = "read your XML into a string".
  root = ElementTree.parse(StringIO.StringIO(string_containing_my_xml)).getroot()
  xmldict = XmlDictConfig(root) // XmlDictConfig is available in activestate recipe.

http://code.activestate.com/recipes/410469-xml-as-dictionary/

如果您不清楚任何事情,请告诉我。