Python XML Parsing
本问题已经有最佳答案,请猛点这里访问。
*注意:LXML不会在我的系统上运行。我希望找到一个不涉及LXML的解决方案。
我已经阅读了这里的一些文档,并且很难按照我的意愿完成这些工作。我想分析一些如下所示的XML文件:
1 2 3 4 5 6 7 8 9 10 | <dict> <key>1375</key> <dict> <key>Key 1</key><integer>1375</integer> <key>Key 2</key><string>Some String</string> <key>Key 3</key><string>Another string</string> <key>Key 4</key><string>Yet another string</string> <key>Key 5</key><string>Strings anyone?</string> </dict> </dict> |
在我试图操作的文件中,有更多的"dict"跟在后面。我想通读XML并输出如下所示的文本/DAT文件:
1375,"一些字符串","另一个字符串","还有另一个字符串","字符串任何人?"
…
EOF
**最初,我尝试使用lxml,但在多次尝试让它在我的系统上工作之后,我继续使用dom。最近,我尝试使用etree来完成这项任务。求求你,为了所有美好的事物的爱,有人能帮我吗?我对python比较陌生,想了解一下它是如何工作的。我提前感谢你。
可以使用Python附带的xml.etree.elementtree。有一个附带的C实现(即更快)的
@acorn提供的代码对我(python 2.7,windows 7)的工作方式是相同的,每种导入方式如下:
1 2 3 4 5 6 | import xml.etree.ElementTree as et import xml.etree.cElementTree as et import lxml.etree as et ... tree = et.fromstring(xmltext) ... |
您使用的是什么操作系统?您在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import xml.etree.ElementTree as et import csv xmltext =""" <dicts> <key>1375</key> <dict> <key>Key 1</key><integer>1375</integer> <key>Key 2</key><string>Some String</string> <key>Key 3</key><string>Another string</string> <key>Key 4</key><string>Yet another string</string> <key>Key 5</key><string>Strings anyone?</string> </dict> </dicts> """ f = open('output.txt', 'w') writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC) tree = et.fromstring(xmltext) # iterate over the dict elements for dict_el in tree.iterfind('dict'): data = [] # get the text contents of each non-key element for el in dict_el: if el.tag == 'string': data.append(el.text) # if it's an integer element convert to int so csv wont quote it elif el.tag == 'integer': data.append(int(el.text)) writer.writerow(data) |