【问题标题】:XML tags generated in the wrong order以错误顺序生成的 XML 标记
【发布时间】:2020-04-18 14:56:44
【问题描述】:

感谢您的宝贵时间。我正在尝试创建一个 xml 文件并将其上传到应用程序中,但由于某种原因,除非名称空间的顺序正确,否则它不会接受该文件。创建字典时,名称和 URI 的顺序正确,但是当我在 ET.Element 函数中将它们用作字典时,顺序似乎发生了变化。我试过只添加字典而不是 dict(**ns) 但它不起作用。

import xml.etree.ElementTree as ET
som='som'
cmn='cmn'
xsi='xsi'
ns = {'xlmns:som':som, 'xlmns:cmn':cmn,'xlmns:xsi':xsi}
for attr, uri in ns.items():
   ET.register_namespace(attr.split(":")[1],uri)
data = ET.Element('tagname', dict(**ns))

编辑:抱歉,忘记添加代码!

想要的输出是<tagname xlmns:som='som' xlmns:cmn='cmn' xlmns:xsi='xsi'><tagname>

我得到的输出是<tagname xlmns:cmn="cmn" xlmns:som="som" xlmns:xsi="xsi">

【问题讨论】:

  • 我们很高兴你和我们在一起,我们需要一个可复制的例子。
  • @nicomp,对不起!我忘记添加代码了!
  • 您的代码缩进是否正确?当前和预期的输出是多少?我这是minimal reproducible example?看起来导入语句和数据丢失了。通过minimal reproducible example... 轻松帮助您
  • 在写代码之前你导入了哪些模块?这对于将为您提供适当解决方案/建议的成员很有用。另外,在问题中提及实际输出和您的预期输出。
  • @SalilTamboli,我使用了 ElementTree 模块

标签: python elementtree


【解决方案1】:

试试这个。

from simplified_scrapy import SimplifiedDoc 
som='som'
cmn='cmn'
xsi='xsi'
ns = {'xlmns:som':som, 'xlmns:cmn':cmn,'xlmns:xsi':xsi}
doc = SimplifiedDoc('<tagname></tagname>')
tag = doc.tagname
tag.setAttrs(ns)
# print (doc.html)
tag.insertAfter("<nexttag></nexttag>")
tag.setContent("test")
print (doc.html)

结果:

<tagname xlmns:som="som" xlmns:cmn="cmn" xlmns:xsi="xsi">test</tagname><nexttag></nexttag>

这里有更多示例:https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2023-02-18
    • 2015-08-05
    • 2021-10-08
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多