迭代XML?

时间:2017-02-06 09:12:03

标签: python xml python-2.6

使用python导航XML的最简单方法是什么?

<html>
 <body>
  <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:body>
    <getservicebyidresponse xmlns="http://www.something.com/soa/2.0/SRIManagement">
     <code xmlns="">
      0
     </code>
     <client xmlns="">
      <action xsi:nil="true">
      </action>
      <actionmode xsi:nil="true">
      </actionmode>
      <clientid>
       405965216
      </clientid>
      <firstname xsi:nil="true">
      </firstname>
      <id xsi:nil="true">
      </id>
      <lastname>
       Last Name
      </lastname>
      <role xsi:nil="true">
      </role>
      <state xsi:nil="true">
      </state>
     </client>
    </getservicebyidresponse>
   </soapenv:body>
  </soapenv:envelope>
 </body>
</html>

我会使用正则表达式并尝试获取我需要的行的值,但是有一种pythonic方式吗?像xml[0][1]之类的东西?

1 个答案:

答案 0 :(得分:2)

正如@deceze已经指出的那样,你可以在这里使用xml.etree.ElementTree

import xml.etree.ElementTree as ET
tree = ET.parse("path_to_xml_file")
root = tree.getroot()

您可以遍历root的所有子节点:

for child in root.iter():
    if child.tag == 'clientid':
        print child.tag, child.text.strip()

子项是嵌套的,我们可以通过索引访问特定的子节点,因此root[0][1]应该有效(只要索引正确)。