2012-10-18 4 views
1

그래서 파이썬으로 작성된 브라우저 기반 프로그램에서 디렉토리의 여러 파일에서 XML 데이터를 파싱 한 다음 페이지의 특정 XML 태그 값을 반환합니다. XML 파일 중 하나에서 값을 성공적으로 반환 할 수 있었지만 디렉토리 내의 모든 파일에서 데이터를 수집하고 스프레드 시트 형식으로 값을 반환하고자합니다. 모든 XML 파일의 데이터를 어떻게 파싱합니까? 또한 XML 파일은 정적이 아니므로 새 파일이 들어오고 나옵니다. 감사! 다음은 내 코드입니다 :파이썬에서 여러 파일의 XML 값을 반환 하시겠습니까?

나는이 아래의 코드를 사용하는 디렉토리에있는 모든 파일에서 데이터를 끌어 오기 위해
from xml.dom.minidom import parseString 

import os 
path = 'C:\Vestigo\XML' 
listing = os.listdir(path) 
for infile in listing: 
    print infile 

file = open(os.path.join(path,infile),'r') 

data = file.read() 
file.close() 

dom = parseString(data) 

xmlTag0 = dom.getElementsByTagName('Extrinsic')[0].toxml() 
xmlData0 = xmlTag0.replace('<Extrinsic>','').replace('</Extrinsic>','') 
xmlTag1 = dom.getElementsByTagName('DeliverTo')[0].toxml() 
xmlData1 = xmlTag1.replace('<DeliverTo>','').replace('</DeliverTo>','') 
xmlTag2 = dom.getElementsByTagName('Street1')[0].toxml() 
xmlData2 = xmlTag2.replace('<Street1>','').replace('</Street1>','') 
xmlTag3 = dom.getElementsByTagName('City')[0].toxml() 
xmlData3 = xmlTag3.replace('<City>','').replace('</City>','') 
xmlTag4 = dom.getElementsByTagName('State')[0].toxml() 
xmlData4 = xmlTag4.replace('<State>','').replace('</State>','') 
xmlTag5 = dom.getElementsByTagName('PostalCode')[0].toxml() 
xmlData5 = xmlTag5.replace('<PostalCode>','').replace('</PostalCode>','') 


import cherrypy 
class Root(object): 
    def index(self): 
     return ('Order Number:', ' ', xmlData0, '<br>Name: ', xmlData1, '<br>Street Address: ', xmlData2, '<br>City/State/Zip: ', xmlData3, ', ', xmlData4, ' ', xmlData5, ' ', """<br><br><a href="/exit">Quit</a>""") 
    index.exposed = True 

    def exit(self): 
     raise SystemExit(0) 
    exit.exposed = True 

def start(): 
    import webbrowser 
    cherrypy.tree.mount(Root(), '/') 
    cherrypy.engine.start_with_callback(
     webbrowser.open, 
     ('http://localhost:8080/',), 
     ) 
    cherrypy.engine.block() 

if __name__=='__main__': 
    start() 
+1

무엇이 문제입니까? –

+0

문제는 디렉토리에 여러 개의 XML 파일이 있고 모두 동일한 헤더를 갖고 있다는 것입니다. 예 : 사람 이름이 모든 파일에 나타납니다. 1 파일에서 이름을 가져올 수 있지만 파일 이름에 관계없이 모든 파일에서 이름을 가져 오는 방법은 무엇입니까? 감사! –

+0

여기에 코드의 들여 쓰기가 귀하가 가지고있는 것과 일치합니까? 왜 네 이름 추출기를'def' 루틴에 넣은 다음''infile for listing' 루프에서 불러내는 겁니까? –

답변

0

: 내 자신의 대답에 도움이 모든 사람을위한

from xml.dom.minidom import parse, parseString 
import os, glob, re 
import cherrypy 
class Root(object): 
    def index(self): 
     path = 'C:\Vestigo\XML' 

     TOTALXML = len(glob.glob(os.path.join(path, '*.xml'))) 
     print TOTALXML 
     i = 0 

     for XMLFile in glob.glob(os.path.join(path, '*.xml')): 
      xmldoc = parse(XMLFile) 
      order_number = xmldoc.getElementsByTagName('Extrinsic')[0].firstChild.data 
      order_name = xmldoc.getElementsByTagName('DeliverTo')[0].firstChild.data 
      street1 = xmldoc.getElementsByTagName('Street1')[0].firstChild.data 
      state = xmldoc.getElementsByTagName('State')[0].firstChild.data 
      zip_code = xmldoc.getElementsByTagName('PostalCode')[0].firstChild.data 
      OUTPUTi = order_number+' '+order_name+' '+street1+' '+state+' '+zip_code 
      i += 1 
      print OUTPUTi 
     return (OUTPUTi, """<br><br><a href="/exit">Quit</a>""") 
    index.exposed = True 

    def exit(self): 
     raise SystemExit(0) 
    exit.exposed = True 

def start(): 
    import webbrowser 
    cherrypy.tree.mount(Root(), '/') 
    cherrypy.engine.start_with_callback(
     webbrowser.open, 
     ('http://localhost:8080/',), 
     ) 
    cherrypy.engine.block() 

if __name__=='__main__': 
    start() 

감사 및 팁 Sheena에게 질문해라.

관련 문제