2014-03-24 81 views
0

我遇到問題。我明白,但不知道語法和方式。我有很大的XML文件。我需要打開每個文件並在標記值中搜索一些字符串,如果找到它,則返回true。我有多個相同標籤。 XML文件中的標籤就是這種情況。錯誤:列表索引超出範圍在Python中

<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") 

注:在上面的代碼我已經使用鏈路= REF [0] .attributes。[ '的xlink:標題']值。那麼這是否意味着ulink標籤的第一次出現?所以如果我想存儲所有ulink標籤的內容,我該怎麼辦?

索引錯誤是由於在同一個名稱下有多個標籤可用嗎?還是不能保存鏈接下的所有條目?請指導我。謝謝。

回答

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屬性並獲取此屬性的值並進行打印。不要打印,你可以有你的條件。

+0

非常感謝。它確實工作:) –

0

IndexErrorref[0]告訴你,該列表是空,不是有你正在尋找標籤的多次出現。爲了處理所有發現的標籤,環比他們:

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

循環將根本無法運行,如果refs是空的。