之前找了好多博客,要不是互抄就是说用etree实现xml对象并使用etree自带的字符串转换方法将xml对象转为字符串输出。但是我就钟爱用minidom定义xml对象,所以干脆就自己琢磨,才发现minidom生成的xml对象是没有直接转为字符串接口的,但有writexml方法,可以将minidom定义的xml对象写入xml文件,但有时这并不是我们想要的,我们想要的是直接将xml对象转换为字符串输出,因此需要绕个弯,即将python标准输出流重定向到自定义的类(注意:这个类要有write方法实现),详细代码如下:
import xml.dom.minidom as minidom
import sys
#实现一个重定向的类,该类有write方法
class XmlStdin():
def __init__(self):
self.str=""
def write(self,value):
self.str+=value
def toString(self):
return self.str
#定义xml对象
dom = minidom.getDOMImplementation().createDocument(None,"root", None)
root = dom.documentElement
element = dom.createElement('test')
element.setAttribute('name', "i am 欧巴")
element.appendChild(dom.createTextNode("欧巴,你好帅呀"))
root.appendChild(element)
#修改标准输出流
xmlStdin=XmlStdin()
sys.stdin=xmlStdin
dom.writexml(sys.stdin, addindent='\t', newl='\n', encoding='utf-8')
print(xmlStdin.toString())
输出为:
<?xml version="1.0" encoding="utf-8"?>
<root>
<test name="i am 欧巴">欧巴,你好帅呀</test>
</root>