解析XML文件取决于可能存在或不存在的标记

时间:2016-05-05 05:54:50

标签: python xml

我试图解析XML文件取决于可能存在或不存在的标记!

如何在不使用异常处理程序的情况下避免此IndexError?

python脚本:

#!/usr/bin/python3
from xml.dom import minidom


doc = minidom.parse("Data.xml")

persons = doc.getElementsByTagName("person")

for person in persons:
    print(person.getElementsByTagName("phone")[0].firstChild.data)

Data.xml:

<?xml version="1.0" encoding="UTF-8"?>
<obo>
    <Persons>
        <person>
            <id>XA123</id>
            <first_name>Adam</first_name>
            <last_name>John</last_name>
            <phone>01-12322222</phone>
        </person>
        <person>
            <id>XA7777</id>
            <first_name>Anna</first_name>
            <last_name>Watson</last_name>
            <relationship>
                <type>Friends</type>
                <to>XA123</to>
            </relationship>
            <!--<phone>01-12322222</phone>-->
        </person>
    </Persons>
</obo>

我得到一个IndexError:

01-12322222
Traceback (most recent call last):
  File "XML->Neo4j-try.py", line 29, in <module>
    print(person.getElementsByTagName("phone")[0].firstChild.data)
IndexError: list index out of range

2 个答案:

答案 0 :(得分:1)

首先,您需要检查当前人员是否有电话数据,并且只有在有电话数据时才进一步操作。此外,将getElementsByTagName()的结果存储在变量中稍微好一些,以避免重复执行相同的查询,尤其是当实际XML在每个person元素中有更多内容时:

for person in persons:
    phones = person.getElementsByTagName("phone")
    if phones:
        print(phones[0].firstChild.data)

答案 1 :(得分:-1)

它是错误的,因为如果有人没有电话那么

from xml.dom import minidom
doc = minidom.parse("Data.xml")
persons = doc.getElementsByTagName("person")
for person in persons:
    if person.getElementsByTagName("phone"):
        print(person.getElementsByTagName("phone")[0].firstChild.data)