Python lxml-多个根目录和格式问题

Python lxml-多个根目录和格式问题,python,xml,lxml,Python,Xml,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')) 这就产生了 <MarketVal

我试图从数据帧生成一个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>

看看,您看到的是一个空元素

一旦你把一个子节点放在下面,或者把一些内容(即使它是一个空白)放在节点中,你就会得到一种与你所寻找的相似的格式

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>
<MarketValueGrid>
  <CalculationOutputs></CalculationOutputs>
</MarketValueGrid>

而且,
之间没有语义上的区别,不管序列化程序是否允许您选择表示或决定使用哪个表示,都是由实现定义的。@zhqiat感谢您这么好地解释了它。结果是,我在第三级传递的是root而不是root1,这造成了这种行为,让我很困惑。