当前位置: 首页 > 知识库问答 >
问题:

在python中使用lxml添加xml前缀声明

谢建业
2023-03-14

简短版本:如何使用 lxml 将 xmlns:xi=“http://www.w3.org/2001/XInclude” 前缀降级添加到我的根元素中?

上下文:

我有一些包含其他文件的 ID 的 XML 文件。

这些 ID 表示引用的文件名。

使用 lxml,我设法用适当的 XInclude 语句替换了这些语句,但是如果我没有前缀降级,我的 XML 解析器将不会添加包含,这是正常的。

编辑:我不会包含我的代码,因为它无助于理解问题。我可以很好地处理文档,我的问题是序列化。

所以从这个

我想得到这个

为此,我尝试使用

`

tree = ET.parse(fileName)
root = tree.getroot() 
root.nsmap['xi'] = "http://www.w3.org/2001/XInclude"
tree.write('output.xml', xml_declaration=True, encoding="UTF-8", pretty_print=True)

`


共有1个答案

齐英耀
2023-03-14

属性 nsmap 不可写,当我尝试您的代码时,我作为错误。

您可以尝试注册命名空间,删除根元素的当前属性(保存后),使用 set() 方法添加命名空间并恢复属性。

举个例子:

>>> root = etree.XML('<root a1="one" a2="two"> <somechild/> </root>')
>>> etree.register_namespace('xi', 'http://www.w3.org/2001/XInclude')
>>> etree.tostring(root)
b'<root a1="one" a2="two"> <somechild/> </root>'
>>> orig_attrib = dict(root.attrib)
>>> root.set('{http://www.w3.org/2001/XInclude}xi', '')
>>> for a in root.attrib: del root.attrib[a]
>>> for a in orig_attrib: root.attrib[a] = orig_attrib[a]
>>> etree.tostring(root)
b'<root xmlns:xi="http://www.w3.org/2001/XInclude" a1="one" a2="two"> <somechild/> </root>'
>>> root.nsmap
{'xi': 'http://www.w3.org/2001/XInclude'}
 类似资料:
  • 问题内容: 我有一个需要打开并进行一些更改的xml文件,其中之一是删除名称空间和前缀,然后保存到另一个文件。这是xml: 我可以进行所需的其他更改,但是找不到如何删除名称空间和前缀的方法。这是我需要的reusklt xml: 这是我的脚本,它将打开并解析xml并将其保存: 那么,如何在脚本中添加代码以删除名称空间和前缀呢? 问题答案: 按照Uku Loskit的建议替换标签。除此之外,请使用lxm

  • 问题内容: 我有一个要解析的xml,进行了一些更改并将其保存到新文件中。它有我要保留的声明。当我保存新文件时,我失去了一点。我如何保留它?这是我的代码: 问题答案: 您可以将关键字参数传递给:

  • 问题内容: 我有一个前缀要添加到每条路线。现在,我在每个定义处都向路线添加了一个常量。有没有一种方法可以自动执行此操作? 问题答案: 答案取决于你如何为该应用程序提供服务。 子安装在另一个容器中 假设你将在容器(等)中运行此应用程序;你实际上需要将该应用程序作为该容器的子部分挂载在该前缀处(任何讲WSGI的东西都可以使用),并将值设置为你的前缀: 设置配置值只是将的会话限制为该URL前缀。和出色的

  • 我有一个包含许多列的表,我希望为每个列添加前缀。 我尝试了以下查询:

  • 写了一个npm包,father打包,担心其中的css会影响到业务方,怎么快速给类名添加统一前缀

  • 我有以下问题,当我生成XML文件时,Jaxb给根元素的名称空间添加前缀,我不知道如何跳过它。 我有软件包信息.java文件 我有根元素 结果我得到了 如果没有@XmlNs,它的工作方式也是一样的,将命名空间添加到@XmlRoolElement也没有帮助。它会有什么问题?

  • 我在pyspark中有一个有100多列的数据帧。我要做的是,对于所有的列名,我希望在列名的开头和结尾添加反勾(`)。 例如: 在pyspark/python中有没有这样做的方法。当我们应用代码时,它应该返回一个数据帧。

  • 问题内容: 我们的应用程序正在通过bootstrap(angular-ui bootstrap)从jQuery移植到AngularJS。 以下出色的文章介绍的一个便捷功能是,如果URL字段中没有前缀,则将其添加“ http://”前缀:http : //www.robsearles.com/2010/05/jquery- validate-url-adding-http / 我正在尝试通过指令在A