2014-03-24 2 views
0

문제가 있습니다. 나는 이해하지만 문법과 방법을 모른다. 거대한 XML 파일이 있습니다. 모든 파일을 열고 태그 값에서 일부 문자열을 검색하고 발견되면 true를 반환해야합니다. 같은 태그가 여러 번 나타납니다. 다음은 XML 파일에 태그가 하나 존재하는 경우입니다.오류 : Minidom 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") 

참고 : 위의 코드에서 나는 link = ref [0] .attributes [ 'xlink : title']. value를 사용했습니다. 그래서 ulink 태그가 처음 나타나는 것을 의미합니까? 그래서 ulink 태그의 모든 내용을 저장하고 싶다면 어떻게해야합니까?

같은 이름으로 여러 태그를 사용할 수 있다는 이유로 색인 오류가 발생합니까? 또는 링크 아래에있는 모든 항목을 저장할 수 없습니까? 나를 안내 해줘. 감사.

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에 의해 모든 요소를 ​​식별하고 이러한 모든 노드의 목록을 얻을 :

답변

1

당신은이 작업을 수행 할 수 있습니다. 해당 목록에서 xlink:title 속성을 찾고이 속성의 값을 가져 와서 인쇄합니다. 인쇄 대신 if 조건을 사용할 수 있습니다. 목록은 당신이 찾고있는 태그의 여러 발행 수가없는 것을, 것을 ref[0]

+0

감사합니다. 그것은 작동 했어 :) –

0

IndexError 당신을 알려줍니다. 그들을 발견 된 모든 태그, 루프를 처리하려면 : refs이 비어있는 경우 루프는 단순히 실행되지 않습니다

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

.

관련 문제