Python - 在没有根的情况下向 xml 添加新元素?

Posted

技术标签:

【中文标题】Python - 在没有根的情况下向 xml 添加新元素?【英文标题】:Python - add new elements to xml without a root? 【发布时间】:2021-11-28 06:48:55 【问题描述】:

我需要制作具有如下结构的xml:

<?xml version='1.0' encoding='utf-8'?>
<tag1 atrib1='bla' atrib1='bla' atrib1='bla' atrib1='bla'>
<tag2 atrib = 'something'>
<tag3 atrib = 'something'>
<tag4 atrib = '..'>
<tag5 atrib = 'important'><div><h1>ContentFrom **OldXml.xml** </h1></div>
...

可以这样创建吗? 由于没有定义根元素(每个元素都是“根”),我应该逐个元素地创建..

任何帮助都会有所帮助, 谢谢!

【问题讨论】:

必须有一个根。它可以像&lt;root&gt;&lt;/root&gt; 所以无法生成像我这样结构的文档? 有可能——只要确保你用 root 包装元素 不明白你的意思,你能举个例子吗 看我的回答。我希望它足够清楚。 【参考方案1】:

见下文。

假设你的数据在data

import xml.etree.ElementTree as ET


data = [[1],['x','y'],['k',12,'zz']]

root = ET.Element("root")
for i,entry in enumerate(data):
  ET.SubElement(root,f'tagi',attrib=f'py':str(v) for y,v in enumerate(entry))
ET.dump(root)

输出

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <tag0 p0="1" />
   <tag1 p0="x" p1="y" />
   <tag2 p0="k" p1="12" p2="zz" />
</root>

【讨论】:

谢谢!这有帮助!【参考方案2】:
<?xml version='1.0' encoding='utf-8'?>
<tag1 atrib1='bla' atrib1='bla' atrib1='bla' atrib1='bla'>
<tag2 atrib = 'something'>
<tag3 atrib = 'something'>
<tag4 atrib = '..'>
<tag5 atrib = 'important'><div><h1>ContentFrom **OldXml.xml** </h1></div>

这不是 XML 文档,XML specification

一个数据对象是一个 XML 文档,如果它是格式良好的,如定义 本规范

你的例子违反了以下规则

只有一个元素,称为根或文档元素,没有 其中一部分出现在任何其他元素的内容中。

对于文档中的每个非根元素C,都有一个 文档中的元素P 使得CP 的内容中, 但不在内容中的任何其他元素的内容中 P.

【讨论】:

我明白了,谢谢!你认为我可以以 xml 的形式创建它,具有漂亮的打印结构,然后以某种方式删除空格并具有这样的最终格式吗?能做到吗? 是的,使用您已经使用的任何库并放置虚拟根目录,然后重载保存/加载函数以更改格式 - 在这种情况下,去除最外面的虚拟根目录。 不确定你的想法

以上是关于Python - 在没有根的情况下向 xml 添加新元素?的主要内容,如果未能解决你的问题,请参考以下文章

在不编辑pom.xml的情况下向Maven添加依赖项

在没有任何布局的情况下向活动添加按钮

如何在没有值的情况下向字典添加键?

如何在没有预先确定的 ViewContainerRef 的情况下向 DOM 动态添加角度组件?

如何在没有 .xib 或故事板文件的情况下向应用程序添加菜单?

有没有办法在不提及/ping他们的情况下向某人添加角色? [discord.js]