使用xml打印子节点

时间:2017-01-11 22:40:24

标签: python xml-parsing

这是我正在使用的api xml:

<response>
    <request>polaris</request>
    <status>0</status>
    <verbiage>OK</verbiage>
    <object id="S251">
        <type id="1">Star</type>
        <name>α UMi</name>
        <catId>α UMi</catId>
        <constellation id="84">Ursa Minor</constellation>
        <ra unit="hour">2.5301944</ra>
        <de unit="degree">89.264167</de>
        <mag>2.02</mag>
    </object>
    <object id="S251">
        <type id="1">Star</type>
        <name>α UMi</name>
        <catId>α UMi</catId>
        <constellation id="84">Ursa Minor</constellation>
        <ra unit="hour">2.5301944</ra>
        <de unit="degree">89.264167</de>
        <mag>2.02</mag>
    </object>
</response>

这是我目前的代码:

   #!/usr/bin/env python

   import xml.etree.ElementTree as ET
   tree = ET.parse('StarGaze.xml')
   root = tree.getroot()
   callevent=root.find('polaris')

   Moc1=callevent.find('polaris')


   for node in Moc1.getiterator():
       if node.tag=='constellation id':
           print node.tag, node.attrib, node.text'

我希望能够打印定义的孩子。例如:

constellation id =

ra unit =

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

迭代object个节点,并使用constellationra方法以及findall()属性找到find().attrib个节点:

import xml.etree.ElementTree as ET

tree = ET.parse('StarGaze.xml')
root = tree.getroot()

for obj in root.findall("object"):
    constellation = obj.find("constellation")
    ra = obj.find("ra")

    print(constellation.attrib["id"], constellation.text, ra.attrib["unit"], ra.text)

会打印:

84 Ursa Minor hour 2.5301944
84 Ursa Minor hour 2.5301944