我正在寻找一种方法将xml文件中的所有可用信息提取到平面文件或数据库。
例如
<r>
<P>
<color val="1F497D"/>
</P>
<t val="123" val2="234">TEST REPORT</t>
</r>
我希望这个为
r
P
color,val,1f497d
t,val,123
t,val2,234
有关如何在python中进行此操作的任何指示?
答案 0 :(得分:1)
然后安装lxml
:
>>> from lxml import etree
>>> parser = etree.XMLParser(remove_blank_text=True)
>>> parsed_xml = etree.XML(s,parser)
>>> for i in parsed_xml.iter('*'):
... print i.tag
... for x in i.items():
... print '%s,%s' % (x[0],x[1])
...
r
P
color
val,1F497D
t
val,123
val2,234
我会留给你格式化输出。
答案 1 :(得分:0)
我认为最好的办法是使用BeautifulSoup
e.g。 (来自他们的docs):
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)
soup.title
# <title>The Dormouse's story</title>
soup.p['class']
# u'title'
for link in soup.find_all('a'):
print(link.get('href'))
# http://example.com/elsie
# http://example.com/lacie
# http://example.com/tillie
您还可以查看lxml,它既简单又高效,而且它就是BeautifulSoup的基础。具体来说,您可能需要查看this page。
答案 2 :(得分:0)
我不确定你为什么要这样做,但是你应该看一下lxml或BeautifulSoup的Python。
或者,如果您只是想要它与上面提到的形式完全相同:
def parse_html(html_string):
import re
fields = re.findall(r'(?<=\<)[\w=\s\"\']+?(?=\/?\>)', html_string)
out = []
for field in fields:
tag = re.match(r'(?P<tag>\w+?) ?', field).group('tag')
attrs = re.findall(r' (\w+?)\=[\"\'](.+?)[\"\']', field)
if attrs:
for x in attrs:
out.append(','.join([tag] + list(x)))
else:
out.append(tag)
print '\n'.join(out)
这有点超过顶部,这就是为什么你通常应该使用lxml或BeautifulSoup,但它完成了这个特定的工作。
我上述计划的输出:
r
P
c,val,1F497D
t,val,123
t,val2,234