我有问题。我理解,但不知道语法和方式。我有大量的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是否由于同一名称下有多个标签可用?或者它是否无法保存链接下的所有条目?请指导我。感谢。
答案 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
为空,则循环将无法运行。