错误:Minidom Python中列表索引超出范围
我遇到了一个问题。我知道我想做什么,但不知道该怎么写代码。我有一些很大的XML文件。我需要打开每个文件,查找某个字符串在标签值中的出现,如果找到了就返回真。我在同一个标签下有多个相同的出现。下面是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标签的内容,我该怎么做呢?
这个索引错误是因为有多个同名的标签吗?还是说它无法保存link下的所有条目?请给我一些指导。谢谢。
2 个回答
0
当你看到 IndexError
和 ref[0]
这个错误时,其实是在告诉你列表是 空的,并不是说你找的标签有很多个。要处理所有找到的标签,你需要把它们放在一个循环里:
refs = dom.getElementsByTagName('ulink')
for ref in refs:
#use ref
如果 refs
是空的,这个循环就不会执行。
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
这个属性,并获取这个属性的值,然后把它打印出来。你也可以把打印的部分换成你的条件判断。