我是Python的新手,并试图编写一个解析一些XML的程序。我遇到的问题是,当我尝试在我认为是NodeList的地方调用.len()
时,我得到了错误'NodeList' object has no attribute 'len'
。这对我来说真的很令人惊讶,因为documentation说:
此外,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>
代码的数量,但事实并非如此。这是为什么?
答案 0 :(得分:1)
请改为尝试:
print len(textCollection)
说明:对len
的支持通常意味着一个类实现__len__()
方法(而不是len()
),这反过来允许您调用len(object)
。
答案 1 :(得分:1)
方法getElementsByTagName()始终返回一个列表,即使只有一个项目。 例如在下一个xml
中<school>
<department />
</school>
如果你有指向“school”标签的指针并且你打电话
myNode.getElementsByTagName("department")
它将返回长度为1的节点列表
如果您确定对方法getElementsByTagName()的调用只返回一个项目,则可以执行此操作而不是上述语句
myNode.getElementsByTagName("department").item(0)
它将返回单个节点,而不是只有一个节点的节点列表。