为什么xml包在Python3中修改我的xml文件?
我使用Python3.5中的为什么xml包在Python3中修改我的xml文件?,xml,python-3.x,elementtree,Xml,Python 3.x,Elementtree,我使用Python3.5中的xml库来读写xml文件。我不修改文件。打开并写。但图书馆修改了文件 为什么要修改 我怎样才能防止这种情况?e、 我只想在一个相当复杂的xml文件中替换特定的标记或它的值,而不丢失任何其他信息 这是示例文件 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <movie> <title>Der Eisbär</title> <ids>
xml
库来读写xml文件。我不修改文件。打开并写。但图书馆修改了文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
<title>Der Eisbär</title>
<ids>
<entry>
<key>tmdb</key>
<value xsi:type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">9321</value>
</entry>
<entry>
<key>imdb</key>
<value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">tt0167132</value>
</entry>
</ids>
</movie>
xml文件变成这样
<movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<title>Der Eisbär</title>
<ids>
<entry>
<key>tmdb</key>
<value xsi:type="xs:int">9321</value>
</entry>
<entry>
<key>imdb</key>
<value xsi:type="xs:string">tt0167132</value>
</entry>
</ids>
</movie>
德尔艾斯巴尔
tmdb
9321
imdb
tt0167132
- 一号线没了
- 第2行中的
-标记现在具有属性 - 第7行和第11行中的
-标记现在具有更少的属性
如果您总是需要XML声明,请在
write()
方法调用中使用XML\u declaration=True
。一般来说,XML名称空间的短名称(以及指定它们的位置)并不稳定。但是为什么不使用lxml
呢?lxml
默认情况下会保留名称空间,尽管您仍然需要传递一个标志才能将XML声明放在最上面。@o11c您是指python包lxml
?我没有注意到。我只是在python文档中使用xml
作为搜索词,发现ElementTree
@o11clxml
也没有帮助。它还对代码进行了一些转换,没有人试图保持属性顺序。因此,lxml
所做的就是对它们进行排序。因此,即使在第一次写入时更改了它们,它们在所有后续写入时也将保持一致。
<movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<title>Der Eisbär</title>
<ids>
<entry>
<key>tmdb</key>
<value xsi:type="xs:int">9321</value>
</entry>
<entry>
<key>imdb</key>
<value xsi:type="xs:string">tt0167132</value>
</entry>
</ids>
</movie>