2016-05-05 17 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

あなたが使用したいいけない理由例外ハンドラ?私はそれが良い方法だと思う。 If-else節をusrにすると、レベルが存在するかどうかを確認できます。しかし、この方法は本当に力学的ではありません。あなたはどれくらいのレベルがあるか分からないかもしれません。 – trantu

+0

私は大きなXMLファイルを持っています - 私は思う - 多くの例外ハンドラがある場合、解析するために長い時間がかかりますplzチェック[this](http://stackoverflow.com/questions/37022525/loading-data-to-neo4j -from-xml-using-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

まず、現在の人物に電話のデータがあるかどうかを確認し、それがある場合にのみさらに処理を進める必要があります。また、実際のXMLは、各person要素でより多くのコンテンツを持っている場合は特に、繰り返し同じクエリを行うことを避けるために、変数にgetElementsByTagName()の結果を格納するために少し良いです:

for person in persons: 
    phones = person.getElementsByTagName("phone") 
    if phones: 
     print(phones[0].firstChild.data) 
関連する問題