【发布时间】:2023-03-27 06:05:02
【问题描述】:
所以我正在开发一个基于浏览器的程序,用 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 文件,所有这些文件都有相同的标题。例如:
Person's Name 出现在每个文件中。我可以从 1 个文件中提取名称,但是无论文件名如何,如何从所有文件中提取名称?谢谢! -
这里代码的缩进是否与那里的代码一致?你为什么不把你的名字提取器放到
def例程中,然后从infile for listing循环内部调用它? -
是的,John,缩进与我这里的一致。我会按照你说的来玩,看看我会得到什么结果。只是为了确认/澄清,当您说名称提取器时,您指的是 dom.getElementsByTagName 方法,对吗?谢谢!
-
大家好,感谢您的帮助,但我已经解决了部分问题。如果您有兴趣,我在这里发布了一个相关问题:stackoverflow.com/q/13018799/1636876 再次感谢!
-
@DrydenLong:如果您已经解决了自己的问题,请发布您的答案并将其标记为正确