错误:在Minidom Python中列出索引超出范围

时间:2014-03-24 11:13:02

标签: python python-3.x minidom

我有问题。我理解,但不知道语法和方式。我有大量的XML文件。我需要打开每个文件并在标记值中搜索一些字符串,如果找到则返回true。我有多次出现相同的标签。这是XML文件中出现的一个标记。

<ulink xlink:type="simple"
xlink:href="urn:x-xxx:r2:reg-doc:*-*:*:*?title=XXX"
xlink:title="XXX" xmlns:xlink="http://www.w3.org/1999/xlink"
>XXX</ulink>.</p>

注意:我在一个文件中有许多这样的标签。我需要阅读所有这些标签中的“xlink:title”内容,并与我的字符串进行比较。如果找到,我需要打印出来。这是我试过的代码。

from xml.dom.minidom import parse, parseString
import os, stat
import sys
def shahul(dir):   
    for r,d,f in os.walk(dir):
        for files in f:
            if files.endswith(".xml"):
                dom=parse(os.path.join(r, files));
                ref=dom.getElementsByTagName('ulink')
                link=ref[0].attributes['xlink:title'].value
                if "mystring" in link:
                    found=True
                    break
                print (files, found, sep='\t')

shahul("location")

注意:在上面的代码中,我使用了link = ref [0] .attributes ['xlink:title']。value。那么这是指ulink标签的第一次出现吗?所以如果我想存储所有出现的ulink标签的内容,我该怎么办?

indexerror是否由于同一名称下有多个标签可用?或者它是否无法保存链接下的所有条目?请指导我。感谢。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

dom=parse(os.path.join(r, files))
ref=dom.getElementsByTagName('ulink')
for n in ref:
    attr = n.getAttributeNode('xlink:title')
    if attr:
        link = attr.nodeValue.strip()
        print link 

它通过名称ulink标识所有元素,并获取所有此类节点的列表。从该列表中,它查找xlink:title属性并获取此属性的值并打印。您可以使用if条件而不是打印。

答案 1 :(得分:0)

带有IndexError

ref[0]告诉您列表为空,而不是您要查找的标记有多个出现。要处理所有找到的标签,请循环遍历它们:

refs = dom.getElementsByTagName('ulink')
for ref in refs:
    #use ref

如果refs为空,则循环将无法运行。