【问题标题】:Python - add new elements to xml without a root?Python - 在没有根的情况下向 xml 添加新元素?
【发布时间】:2023-03-27 22:10:01
【问题描述】:

我需要制作具有如下结构的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 包装元素
  • 不明白你的意思,你能举个例子吗
  • 看我的回答。我希望它足够清楚。

标签: python xml parsing elementtree minidom


【解决方案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'tag{i}',attrib={f'p{y}':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 的形式创建它,具有漂亮的打印结构,然后以某种方式删除空格并具有这样的最终格式吗?能做到吗?
  • 是的,使用您已经使用的任何库并放置虚拟根目录,然后重载保存/加载函数以更改格式 - 在这种情况下,去除最外面的虚拟根目录。
  • 不确定你的想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 2012-08-03
相关资源
最近更新 更多