在Python中从多个文件返回XML值?

在Python中从多个文件返回XML值?,python,xml,cherrypy,Python,Xml,Cherrypy,因此,我正在开发一个基于浏览器的程序,用Python编写,它解析目录中多个文件中的XML数据,然后返回页面上某些XML标记的值。我已经成功地从一个XML文件返回了值,但我希望从目录中的每个文件收集数据,并以电子表格格式返回值。如何解析每个XML文件中的数据?而且,XML文件不是静态的,会有新的文件来来去去去。谢谢下面是我的代码: from xml.dom.minidom import parseString import os path = 'C:\Vestigo\XML' listing =

因此,我正在开发一个基于浏览器的程序,用Python编写,它解析目录中多个文件中的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()
从xml.dom.minidom导入解析字符串
导入操作系统
路径='C:\Vestigo\XML'
listing=os.listdir(路径)
对于清单中的填充:
印刷填充
file=open(os.path.join(path,infle),'r')
data=file.read()
file.close()文件
dom=parseString(数据)
xmlTag0=dom.getElementsByTagName('Exterinsic')[0].toxml()
xmlData0=xmlTag0.replace('','').replace('','')
xmlTag1=dom.getElementsByTagName('DeliverTo')[0].toxml()
xmlData1=xmlTag1.replace('','').replace('','')
xmlTag2=dom.getElementsByTagName('Street1')[0].toxml()
xmlData2=xmlTag2.replace('','').replace('','')
xmlTag3=dom.getElementsByTagName('City')[0].toxml()
xmlData3=xmlTag3.replace('','').replace('','')
xmlTag4=dom.getElementsByTagName('State')[0].toxml()
xmlData4=xmlTag4.replace('','').replace('','')
xmlTag5=dom.getElementsByTagName('PostalCode')[0].toxml()
xmlData5=xmlTag5.replace('','').replace('','')
进口樱桃
类根(对象):
def索引(自):
return('ordernumber:','',xmlData0',
Name:',xmlData1',
街道地址:',xmlData2',
城市/州/邮政编码:',xmlData3',',',xmlData4',xmlData5',,“

”) index.exposed=True def出口(自): 升起系统出口(0) exit.exposed=True def start(): 导入网络浏览器 cherrypy.tree.mount(根(),“/”) cherrypy.engine.start_与_回调( 韦伯·布鲁瑟,公开赛, ('http://localhost:8080/',), ) cherrypy.engine.block() 如果“名称”=“\uuuuuuuu主要”: 开始()

编辑:使用下面的解决方案更新。

为了从目录中的每个文件中提取数据,我使用了下面的代码:

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()
从xml.dom.minidom导入解析,解析字符串
导入操作系统、全局、re
进口樱桃
类根(对象):
def索引(自):
路径='C:\Vestigo\XML'
TOTALXML=len(glob.glob(os.path.join(path,*.xml'))
打印TOTALXML
i=0
对于glob.glob(os.path.join(path,*.xml'))中的XMLFile:
xmldoc=parse(XMLFile)
order_number=xmldoc.getElementsByTagName('Exterinsic')[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
输出=订单号+订单名+街道1+州+邮政编码
i+=1
打印输出
返回(OUTPUTi,“

”) index.exposed=True def出口(自): 升起系统出口(0) exit.exposed=True def start(): 导入网络浏览器 cherrypy.tree.mount(根(),“/”) cherrypy.engine.start_与_回调( 韦伯·布鲁瑟,公开赛, ('http://localhost:8080/',), ) cherrypy.engine.block() 如果“名称”=“\uuuuuuuu主要”: 开始()

谢谢你们的帮助,谢谢你们回答我自己的问题,希娜

问题是我在一个目录中有许多XML文件,所有这些文件都有相同的头。例如:每个文件中都会显示人员的姓名。我可以从一个文件中提取名称,但如何从所有文件中提取名称,而不考虑文件名?谢谢这里代码的缩进是否与那里代码的缩进一致?为什么不将名称提取器放入
def
例程中,然后从
infle for listing
循环中调用它呢?是的,John,缩进与我这里的缩进匹配。我要认真对待你说的话,看看结果如何。为了确认/澄清,当您说name extractor时,您指的是dom.getElementsByTagName方法,对吗?谢谢嘿,伙计们,谢谢你们的帮助,但我已经解决了部分问题。如果你有兴趣,我在这里发布了一个相关的问题:再次感谢@DrydenLong:如果你已经解决了自己的问题,请张贴你的答案并标记为正确