为什么xml包在Python3中修改我的xml文件?
我使用
Python3.5中的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> 这是代码 import xml.etree.ElementTree as ET tree = ET.parse('x.nfo') tree.write('y.nfo',encoding='utf-8') 而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> >第1行消失了. 解决方法
请注意,“xml包”和“xml库”是不明确的.标准库中有几个与XML相关的模块:
https://docs.python.org/3/library/xml.html.
ElementTree将名称空间声明移动到根元素,并删除文档中实际未使用的名称空间. 为什么ElementTree会这样做?我不知道,但也许这是一种使实现更简单的方法.
我认为没有办法阻止这种情况发生.这个问题之前已经提出过.这是两个非常相似的问题,没有答案: > How do I parse and write XML using Python’s ElementTree without moving namespaces around? 我的建议是使用lxml而不是ElementTree.使用lxml,名称空间声明将保留在原始文件中的位置.
该行是XML声明.建议但不强制要求. 如果您始终需要XML声明,请在write()方法调用中使用xml_declaration = True. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |