请问下生成 xml 的问题。

2019-09-05 18:40:08 +08:00
 xiaolinjia

之前也没用过 py 来生成 xml。一般都是 lxml 解析。

然后今天代码用内置的 xml 模块写好了,生成的时候才发现个坑,塔喵的 xml 模块生成的 xml 文件硬是有个 <?xml version="1.0" ?>头。 再看了下 xml 模块的源码。。

    def writexml(self, writer, indent="", addindent="", newl="",
                 encoding = None):
        if encoding is None:
            writer.write('<?xml version="1.0" ?>'+newl)
        else:
            writer.write('<?xml version="1.0" encoding="%s"?>%s' % (encoding, newl))
        for node in self.childNodes:
            node.writexml(writer, indent, addindent, newl)

之后查了下 lxml 生成的没头,这个 xml 生成的一定有头。但是又有点懒得用 lxml 再重写一次了(因为结点有点多)。所以有什么办法可以去掉这个<?xml version="1.0" ?>头不?

比如说 lxml 有什么美化 xml 输出的方法之类的不,因为这玩意不仅多了头,连下面的行都有自带多个 tab,单纯用文件形式打开,再 replace 掉开头一行感觉也不太对。

1874 次点击
所在节点    Python
3 条回复
izoabr
2019-09-05 18:44:59 +08:00
你写完再去 replace 一下不就得了,或者干脆把这个库复制一份改个名,把这几行注释掉再当自有库用。
MonoLogueChi
2019-09-05 18:50:56 +08:00
xml 又不是给人看的,只要能正常解析,管他里面有啥呢😏

Python 我不太懂,你看一下这个函数输出的是什么,要是 string 类型的话就替换再保存应该就可以了吧。直接是 stream 类型的话,那就读出来替换再保存。思路应该是这样的吧
guiqiqi
2019-09-05 21:18:21 +08:00
用 xml.tree.cElementTree.tostring 函数,将 encoding 参数传入 False 即可解决

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/598304

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX