我试图以XML格式保存来自多个列表的数据,但我无法理解如何正确地显示XML。我现在的代码示例如下:
from lxml import etree
#Create XML Root
articles = etree.Element('root')
#Create Lists & Data
t_list = ['title1', 'title2', 'title3', 'title4', 'title5']
c_list = ['content1', 'content2', 'content3', 'content4', 'content5']
sum_list = ['summary1', 'summary2', 'summary3', 'summary4', 'summary5']
s_list = ['source1', 'source2', 'source3', 'source4', 'source5']
i = 0
for t in t_list:
for i in range(len(t_list)):
#Create SubElements of XML Root
article = etree.SubElement(articles, 'Article')
titles = etree.SubElement(article, 'Title')
summary = etree.SubElement(article, 'Summary')
source = etree.SubElement(article, 'Source')
content = etree.SubElement(article, 'Content')
#Add List Data to SubElements
titles.text = t_list[i]
summary.text = sum_list[i]
source.text = s_list[i]
content.text = c_list[i]
print(etree.tostring(articles, pretty_print=True))
我的当前输出以一种非常混乱的方式写成,所有这些都在一行中如下:
b'<root>\n <Article>\n <Title>title1</Title>\n <Summary>summary1</Summary>\n <Source>source1</Source>\n <Content>content1</Content>\n </Article>\n
看起来pretty_print
中的lxml
函数正在添加适当的缩进,以及我想要的\n
中断,但它似乎没有得到解释输出时正确;它写在一行。
我想要获得的输出如下:
<root>
<Article>
<Title>title1</Title>
<Summary>summary1</Summary>
<Source>source1</Source>
<Content>content1</Content>
</Article>
理想情况下,我希望将输出视为有效的XML文档,并以适当的嵌套格式显示。
答案 0 :(得分:0)
我只使用Python中的基本ET模块,并且无法为python 3.5找到lxml下载(我已经开始)以便测试它,但是 b 之前的行表示字节,快速浏览文档表明tostring()有一个编码关键字,所以你只需要将其设置为unicode或utf-8。
我还要提到你不需要设置&#34;我&#34;在你的for循环之前(python会创建&#34; i&#34;它需要for循环),尽管我个人 - 会压缩列表并迭代列表中的项目他们自己(虽然在这种情况下不会对代码产生任何实际影响)。
答案 1 :(得分:0)
您的&#34;电流输出&#34;是由etree.tostring()
生成的字节串的表示(内部python表示),似乎在Python3 print(somebytestring)
中打印表示而不是实际的字符串。
希望解决方案非常简单:只需将desired encoding传递给etree.tostring()
,即:
xml = etree.tostring(articles, encoding="unicode", pretty_print=True)
print(xml)