我要做的就是读取一个本地.xml文件(将其编码为UTF-8,使其具有正确的标题,然后重新保存文件)。但是,当我运行以下命令时,它会在每个XML元素中添加可怕的“ns0:”声明:
import xml.etree.ElementTree as ET
import sys, os
# note that this is the *module*'s `register_namespace()` function
# WTF THIS SHOULD WORK....
ET.register_namespace("", "http://www.w3.org/2000/svg")
tree = ET.ElementTree() # instantiate an object of *class* `ElementTree`
tree.parse('//cbweb1/inetpub/x/sitemap/sitemap_index.xml')
tree.write('//cbweb1/inetpub/x/sitemap/test.xml', encoding = 'utf-8', xml_declaration=True)
我做错了什么?
仅供参考,这是Python 2.7.x(已尝试过3.4)
修改
输入:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://www.example.com/something.xml</loc>
<lastmod>2014-05-01</lastmod>
</sitemap>
</sitemapindex>
输出:
<?xml version="1.0" encoding="utf-8"?>
<ns0:sitemapindex xmlns:ns0="http://www.sitemaps.org/schemas/sitemap/0.9">
<ns0:sitemap>
<ns0:loc>http://www.example.com/something.xml</ns0:loc>
<ns0:lastmod>2014-05-01</ns0:lastmod>
</ns0:sitemap>
</ns0:sitemapindex>
答案 0 :(得分:6)
如果原始输入中的默认命名空间为http://www.sitemaps.org/schemas/sitemap/0.9
,如下所示:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
然后如果您使用
将其设置为其他内容ET.register_namespace("", "http://www.w3.org/2000/svg")
你需要在http://www.sitemaps.org/schemas/sitemap/0.9
的输出中声明一些其他命名空间。相反,您应该将其设置为相同的值:
ET.register_namespace("", "http://www.sitemaps.org/schemas/sitemap/0.9")
(或者,您可以尝试根本不将其设置为任何内容;默认情况下,输入中存在的输出中可能会使用相同的命名空间。)