" /> 如何在 Python/ElementTree 中输出 XML 声明 <?xml version="1.0"?>

如何在 Python/ElementTree 中输出 XML 声明

2024-02-29

我正在尝试为 XML 格式的单词参考源文件创建一个 XML 文件。当我写入文件时,仅显示“xml_decation=True”<?xml version='1.0' encoding='us-ascii'?>但我想要它的形式<?xml version="1.0"?>.

from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
import xml.etree.ElementTree as ET
import uuid
from lxml import etree

root=Element('b:sources')
root.set('SelectedStyle','')
root.set('xmlns:b','http://schemas.openxmlformats.org/officeDocument/2006/bibliography')
root.set('xmlns','http://schemas.openxmlformats.org/officeDocument/2006/bibliography')
#root.attrib=('SelectedStyle'='', 'xmlns:b'='"http://schemas.openxmlformats.org/officeDocument/2006/bibliography"', 'xmlns:b'='"http://schemas.openxmlformats.org/officeDocument/2006/bibliography"','xmlns'='"http://schemas.openxmlformats.org/officeDocument/2006/bibliography"')


source=ET.SubElement(root, 'b:source')
ET.SubElement(source,'b:Tag')
ET.SubElement(source,'b:SourceType').text='Misc'
ET.SubElement(source,'b:guid').text=str(uuid.uuid1())

Author=ET.SubElement(source,'b:Author')
Author2=ET.SubElement(Author,'b:Author')
ET.SubElement(Author2,'b:Corporate').text='Norsk olje og gass'

ET.SubElement(source, 'b:Title').text='R-002'
ET.SubElement(source, 'b:Year').text='2019'
ET.SubElement(source, 'b:Month').text='10'
ET.SubElement(source, 'b:Day').text='27'


tree=ElementTree(root)

tree.write('Sources.xml', xml_declaration=True, method='xml')

Answer:

使用时xml.etree.ElementTree无法避免在声明中包含编码属性。如果您根本不需要 XML 声明中的编码属性,则需要使用xml.dom.minidom not xml.etree.ElementTree.

这是设置示例的片段:

import xml.etree.ElementTree
a = xml.etree.ElementTree.Element('a')
tree = xml.etree.ElementTree.ElementTree(element=a)
root = tree.getroot()

省略编码:

out = xml.etree.ElementTree.tostring(root, xml_declaration=True)
b"<?xml version='1.0' encoding='us-ascii'?>\n<a />"

编码us-ascii:

out = xml.etree.ElementTree.tostring(root, encoding='us-ascii', xml_declaration=True)
b"<?xml version='1.0' encoding='us-ascii'?>\n<a />"

编码unicode:

out = xml.etree.ElementTree.tostring(root, encoding='unicode', xml_declaration=True)
"<?xml version='1.0' encoding='UTF-8'?>\n<a />"

Using minidom:

让我们采用上面的第一个示例,省略编码并使用变量out作为输入xml.dom.minidom您将看到您正在寻找的输出。

import xml.dom.minidom
dom = xml.dom.minidom.parseString(out)
dom.toxml()
'<?xml version="1.0" ?><a/>'

还有一个漂亮的打印选项:

dom.toprettyxml()
'<?xml version="1.0" ?>\n<a/>\n'

Note

查看源代码,您可以看到编码是硬编码在输出中的。

        with _get_writer(file_or_filename, encoding) as (write, declared_encoding):
            if method == "xml" and (xml_declaration or
                    (xml_declaration is None and
                     declared_encoding.lower() not in ("utf-8", "us-ascii"))):
                write("<?xml version='1.0' encoding='%s'?>\n" % (
                    declared_encoding,))

https://github.com/python/cpython/blob/550c44b89513ea96d209e2ff761302238715f082/Lib/xml/etree/ElementTree.py#L731-L736 https://github.com/python/cpython/blob/550c44b89513ea96d209e2ff761302238715f082/Lib/xml/etree/ElementTree.py#L731-L736

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python/ElementTree 中输出 XML 声明 的相关文章

随机推荐

  • initializer_list c++11 中的求值顺序

    在下面的代码中是否需要f1之前被调用f2 或反之亦然 还是未指定 int f1 int f2 std initializer list
  • 在 Python 列表推导式中缓存值

    我正在使用以下列表理解 resources obj get file for obj in iterator if obj get file None 有没有办法 缓存 obj get file 当它在 if 语句中检查时 这样就不必调用g
  • 使用 Google OAuth 2.0 的 Nginx 代理

    我有一个 Ubuntu 14 04 服务器 并且有一个运行在以下位置的流星应用程序localhost 3000在此服务器上 我的服务器的公共 FQDN 是sub example com Meteor 应用程序使用 Google OAuth
  • 窗口调整大小指令

    我试图在窗口调整大小时调整 div 大小 环顾四周后 似乎使用指令是最好的解决方案 模板 div div 指示 myApp directive elheightresize window function window return lin
  • 如何编辑 WKWebView 显示的键盘附件视图?

    我在 Swift 应用程序中使用 WKWebView 来呈现一些文本字段 我设置了一些外观属性来匹配特定的设计 在这种情况下 其背景必须是蓝色的 但是当 WKWebView 触发键盘时 它会对外观属性执行一些操作 并以我的颜色的浅色外观显示
  • Python 多处理管道非常慢(>100ms)

    我目前正在用 Python 3 x 编写一个图像处理程序 需要以低延迟 目前 我正在使用管道向子进程发送命令 最重要的是在框架更新时通知它们 在测量父级的 send 命令和子级的 receive 命令之间的时间时 延迟始终 gt 100 毫
  • 将 HTML 返回到 AJAX Rails 调用

    读完大卫 海涅迈尔 汉森之后博客文章 https 37signals com svn posts 3697 server generated javascript responses关于服务器生成的 javascript 我决定回顾一下在
  • 将表达式传递给 NHibernate 中的方法会导致“ConstantExpression”类型的对象无法转换为“LambdaExpression”类型

    这个问题在 NHibernate 2 和 3 中都会出现 我有一个类 A 它有一个类 B 的成员集 直接查询类可以很好地执行 但是当我将涉及类 B 的表达式之一传递到方法中时 出现以下错误 System ArgumentException
  • Airflow - 分支连接运算符

    我正在尝试加入 Airflow 中的分支操作员 我这样做了 op1 gt gt op2 op3 op4 op2 gt gt op5 op3 gt gt op6 op4 gt gt op7 op5 op6 op7 gt gt op8 它给出了
  • 涉及异步调用时,如何设置具体的执行顺序?

    我是 JavaScript 世界的新手 2 天 我之前唯一的编码经验是 Java 其中语句的执行是按顺序进行的 我明白 或者至少我读过 JavaScript 是异步的 这意味着如果有一个语句需要很长时间才能执行 则执行下一个语句 而不会阻止
  • 您是否混淆过您的商业 Java 代码? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道是否有人在他自己的商业产品上使用商业 免费的 java 混淆器 我只知道一个项目在发布的 ant 构建步骤中实际上有一个令人困惑的步骤
  • 如何访问conda环境.yml中预定义的环境变量?

    我希望与其他人共享一个environment yml 文件 以重现与我相同的设置 我们使用的代码取决于环境变量 PWD 我希望在environment yml 中设置一个新的环境变量 我可以在其中访问 PWD 例如 我能够做到 variab
  • 继承层次:构造函数和析构函数的执行顺序

    Here http www parashift com c faq lite multiple inheritance html http www parashift com c faq lite multiple inheritance
  • 在Python中使用lambda表达式在循环内生成函数[重复]

    这个问题在这里已经有答案了 如果我制作两个函数列表 def makeFun i return lambda i a makeFun i for i in range 10 b lambda i for i in range 10 为什么要列
  • 空合并运算符的右结合如何表现?

    空合并运算符是右结合的 这意味着以下形式的表达式 第一的 第二 第三 被评估为 第一的 第二个 第三个 根据上述规则 我认为以下翻译是不正确的 From Address contact user ContactAddress if cont
  • MSBuild 运行单元测试

    我正在尝试配置 CruiseControl net 以定期构建我们的存储库代码并运行解决方案中包含的测试 我已经配置了从 svn 服务器和构建部分检索代码 但我无法对其进行测试 MSBuild 一直在抱怨这一点 错误 MSB4057 目标
  • 读取特定 Parquet 列时,将读取所有列而不是 Parquet-Sql 中给出的单个列

    我在 Parquet Documentation 中读到 只有我查询的列 才会读取并处理该列的数据 但是当我看到 Spark UI 时 我发现完整的文件已被读取 以下是编写 parquet 文件并在 Spark Sql 中读取的代码 obj
  • 具有多索引的 df.at 与 df.loc

    我有一个关于之间差异的问题df loc and df at关于具有多重索引的数据帧 我一直在 stackoverflow 上查看一些精彩的资源 但它似乎并没有阐明我的问题 尤其是这个 熊猫 at 与 loc https stackoverf
  • libcurl 中是否有可用的压缩

    我需要使用 libcurl 和 C 将一个大文件从本地计算机传输到远程计算机 libcurl 是否有内置可用的压缩选项 由于要传输的数据很大 大小为 100 MB 到 1 GB 如果 libcurl 本身提供此类选项会更好 我知道我们可以压
  • 如何在 Python/ElementTree 中输出 XML 声明

    我正在尝试为 XML 格式的单词参考源文件创建一个 XML 文件 当我写入文件时 仅显示 xml decation True 但我想要它的形式 from xml etree ElementTree import ElementTree fr