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() 方法总是返回一个列表,即使只有一项。例如在下一个 xml

<school>
   <department />
</school>

如果你有指向“学校”标签的指针并且你打电话

myNode.getElementsByTagName("department")

它将返回一个长度为 1 的节点列表

如果您确定对方法 getElementsByTagName() 的调用将只返回一项,您可以这样做而不是上面的语句

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

它将返回一个节点,而不是只有一个节点的节点列表。

于 2012-05-18T15:10:57.760 回答