2016-05-05 18 views
1

我试图解析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 
+1

你为什么不想要使用异常处理程序我认为这是做这件事的好方法。你可以用usr If-else子句来确定一个级别是否存在。但这种方式并不是真正动态的。你可能不知道它有多少级别。 – trantu

+0

因为我有大的XML文件,我认为 - 将需要很长时间来解析,如果有很多异常处理程序PLZ检查[这](http://stackoverflow.com/questions/37022525/loading-data-to-neo4j -from-XML的使用-py2neo) – Zingo

回答

-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) 
1

首先,您需要检查当前的人是否有电话数据,并且只有在有电话数据的情况下才会继续。而且,稍微好一点的到的getElementsByTagName()结果存储在一个变量,以避免反复做相同的查询,特别是当实际的XML在每个person元素多了很多内容:

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