Py学习  »  mzjn  »  全部回复
回复总数  3

使用lxml解析XML时,原始名称空间前缀将被保留。下面的代码符合您的要求。注意使用 {*} 作为命名空间通配符。

from lxml import etree
 
tree = etree.parse("data1.xml")
 
for name in tree.findall(".//{*}name"):
    name.text = "Sir " + name.text
6 年前
回复了 mzjn 创建的主题 » 为什么从django导入*不能导入所有子模块?

没有 __all__ django/__init__.py . 这就是为什么通配符导入 from django import * 不起作用。

见 https://docs.python.org/3/tutorial/modules.html#importing-from-a-package Can someone explain __all__ in Python? .

9 年前
回复了 mzjn 创建的主题 » python:用elementtree解析xml并用名称空间编写

注意“xml包”和“ xml “图书馆”是模棱两可的。标准库中有几个与xml相关的模块: https://docs.python.org/3/library/xml.html .

为什么要修改?

elementtree将命名空间声明移动到根元素,并移除文档中未实际使用的命名空间。

ElementTree为什么要这么做?我不知道,但也许这是一种简化实现的方法。

我怎样才能防止这种情况?例如,我只想替换一个非常复杂的XML文件中的特定标记或它的值,而不丢失任何其他信息。

我不认为有什么办法可以阻止这一切。这个问题以前就提过。这里有两个非常相似的问题,没有答案:

我的建议是 lxml 而不是元素树。使用lxml,命名空间声明将保留在原始文件中出现的位置。

一号线不见了。

那一行是xml声明。建议但不是强制性的。

如果始终需要XML声明,请使用 xml_declaration=True 在 write() 方法调用。