首页 > 解决方案 > lxml - 多个根和格式问题

问题描述

我正在尝试从数据框生成 xml 文件。一切都很好,除了这个我无法弄清楚的小问题。为了便于理解,我删除了不必要的代码。

from lxml import etree as et

root = et.Element('MarketValueGrid')
root1 = et.SubElement(root,'CalculationOutputs')
print(et.tostring(root, pretty_print=True).decode('utf-8'))

这产生

<MarketValueGrid>
 <CalculationOutputs/>
</MarketValueGrid>

我需要的是:

<MarketValueGrid>
 <CalculationOutputs>
 </CalculationOutputs>
</MarketValueGrid>

标签: pythonxmllxml

解决方案


看看xml spec,你看到的是一个空元素。

一旦您将一个子节点或一些内容(即使它是一个空白空间)放在节点下方,您将获得与您正在寻找的格式相似的格式。

from lxml import etree as et

root = et.Element('MarketValueGrid')
root1 = et.SubElement(root,'CalculationOutputs')
root2 = et.SubElement(root1,'Value')


print(et.tostring(root, pretty_print=True).decode('utf-8'))

<MarketValueGrid>
  <CalculationOutputs>
    <Value/>
  </CalculationOutputs>
</MarketValueGrid>

在您的情况下,添加root1 = et.SubElement(root,'CalculationOutputs').text=""将生成您正在寻找的输出。

<MarketValueGrid>
  <CalculationOutputs></CalculationOutputs>
</MarketValueGrid>

推荐阅读