1

xml ファイルからデータを取得するコードをいくつか持っていますが、ランダムにスローを開始しているようです。

Traceback (most recent call last):
  File "C:\Users\mike\Documents\python\arl xml\turn 24 reader", line 52, in <module>
    unitCount   = getText(evoNode.getElementsByTagName("count")[0].childNodes)
IndexError: list index out of range

実行した最初の数回は問題ありませんでしたが、誤って変更したかどうかはわかりませんが、現在はエラーがスローされています。

これは、使用しようとしている xml のセクションの例です。

- <unit>
  <count>1200</count> 
  <type>Zweihander Doppelsoldners</type> 
  <typeid>102</typeid> 
  </unit>

そして、これが不平を言っているコードです。

   for unitNode in node.getElementsByTagName('unit'):
      unitName      = getText(evoNode.getElementsByTagName("type")[0].childNodes)
      unitId     = getText(evoNode.getElementsByTagName("typeid")[0].childNodes)
      unitCount   = getText(evoNode.getElementsByTagName("count")[0].childNodes)

      unitList.append("%s x %s" % (unitName, unitCount))

count は xml ファイルの units セクションの 3 つのうちで最も大きいため、最初に count 行について不平を言うことは認めますが、非常によく似た一連のコードを正常に実行することを考えると、不平を言う理由はまだわかりません。複製して編集したものです。

私ができることを知っている人、または質問を絞り込む方法を提案できる人はいますか?

4

2 に答える 2

2

簡単なアイデア:evoNode.getElementsByTagName("count")空でないリストを返すかどうかを確認します:

counts = evoNode.getElementsByTagName("count")
if counts:
    unitCount = getText(counts[0].childNodes)

もちろん、コードによって取得されたすべてのリストにチェックを適用する必要があります。

もう1つ、 を使用して反復しますunitNodeが、ループ内では にアクセスしますevoNode。これはおそらくすべての反復で同じです。

于 2009-01-14T17:08:01.977 に答える
1

ギメルが言ったように、空でないリストを返す場合は getElementsByTagName("count") をチェックする必要がありますが、問題に戻ります:

以前は機能していたとのことですが、問題は XML を取得するソースにあると思います。

于 2009-01-14T17:14:38.170 に答える