2012-04-15 184 views
3

我对Python很陌生,试图编写解析某些XML的程序。我遇到了这个问题,当我尝试拨打.len()时,我认为它是NodeList,我得到错误'NodeList' object has no attribute 'len'。这真是令我感到诧异,因为documentation说:在Python中解析XML和我的'NodeList'对象没有属性'len'

此外,Python的DOM接口需要一些额外的支持,以允许使用像Python序列节点列表对象。所有节点列表的实现必须包括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

尝试'textCollection.length' – Torious 2012-04-15 03:10:37

回答

1

试试这个:

print len(textCollection) 

说明:支持len通常意味着一个类实现了__len__()方法(不len()),这反过来又可以让你打电话len(object)

+0

刚刚经过测试,它的工作原理。谢谢。 – mukmuk64 2012-04-15 03:14:15

+0

很好听。不要忘记接受(10分钟后) – 2012-04-15 03:15:31

1

getElementsByTagName()方法总是返回一个列表,即使只有一个项目。 例如,在接下来的XML

<school> 
    <department /> 
</school> 

如果你有指向“学校”的标签,你叫

myNode.getElementsByTagName("department") 

它会返回lenght的节点列表中的一个

如果您确定调用方法getElementsByTagName()将只返回一个项目,您可以执行此操作而不是上述语句

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

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

相关问题