3

私はPythonを初めて使用し、XMLを解析するプログラムを作成しようとしています。.len()NodeList であると思われるものを呼び出そうとすると、エラーが発生するという問題があります'NodeList' object has no attribute 'len'ドキュメントには次のように書かれているため、これは私にとって本当に驚くべきことです。

さらに、Python DOM インターフェースでは、NodeList オブジェクトを Python シーケンスとして使用できるようにするために、いくつかの追加サポートを提供する必要があります。すべての NodeList 実装には、 len ()のサポートが含まれている必要があります

これが私のコードです:

import xml.dom.minidom

def testFunction(translationDOM):
    textCollection = translationDOM.getElementsByTagName("onscreen_text")
    for onscreenText in textCollection:
        print textCollection.len()

そしてMain()...

translationDom  = parse(xmlFileName)
testFunction(translationDom)

ここに xml 全体 (大量) を投稿したくありませんが、次のようなブロックがいくつかあります。

<onscreen_text>
    <source id="2036" unique_name="blah" should_be_translated="True">
    ....
 </onscreen_text>

エラーの全文は次のとおりです。

  File "trophytool.py", line 155, in <module>
    main()
  File "trophytool.py", line 134, in main
    testFunction(translationDom)
  File "trophytool.py", line 64, in testFunction
    print textCollection.len()
AttributeError: 'NodeList' object has no attribute 'len'

見つかったタグの数を出力すると思うかもしれ<onscreen_text>ませんが、そうではありません。どうしてこれなの?

4

2 に答える 2

1

代わりにこれを試してください:

print len(textCollection)

説明: のサポートは、len通常、クラスが__len__()メソッド (ではないlen()) を実装することを意味し、これにより、 を呼び出すことができますlen(object)

于 2012-04-15T03:10:00.390 に答える
1

メソッド getElementsByTagName() は、アイテムが 1 つしかない場合でも、常にリストを返します。たとえば、次のxml

<school>
   <department />
</school>

「学校」タグへのポインターがあり、呼び出す場合

myNode.getElementsByTagName("department")

長さ1のノードのリストを返します

メソッド getElementsByTagName() の呼び出しが 1 つのアイテムのみを返すことが確実な場合は、上記のステートメントの代わりにこれを行うことができます。

myNode.getElementsByTagName("department").item(0)

ノードが 1 つだけのノードのリストではなく、単一のノードを返します。

于 2012-05-18T15:10:57.760 に答える