我需要以极简主义的方式从python输出XML:
此时我正在使用print语句明确打印出尖括号标签,唯一真正阻止我的是在标签内转义文本,我不知道该怎么做。
有什么建议吗?
更新:对于Python,Java有StAX XMLStreamWriter吗?我可能有一个大的XML文档要生成,我不需要(或想要)将整个文档保存在内存中。
更新#2:我还需要在<
,>
和&
之外的文本中转义随机unicode或非ASCII字符。
答案 0 :(得分:4)
嗯,看起来SAX毕竟不是那么难用。这是一个例子。
xmltest.py:
import xml.sax.xmlreader
import xml.sax.saxutils
def testJunk(file, e2content):
attr0 = xml.sax.xmlreader.AttributesImpl({})
x = xml.sax.saxutils.XMLGenerator(file)
x.startDocument()
x.startElement("document", attr0)
x.startElement("element1", attr0)
x.characters("bingo")
x.endElement("element1")
x.startElement("element2", attr0)
x.characters(e2content)
x.endElement("element2")
x.endElement("document")
x.endDocument()
测试:
>>> import xmltest
>>> xmltest.testJunk(open("test.xml","w"), "wham < 3!")
产生
<?xml version="1.0" encoding="iso-8859-1"?>
<document><element1>bingo</element1><element2>wham < 3!</element2></document>
答案 1 :(得分:2)
如果任务很简单,minidom就足够了。这里举个简短的例子:
from xml.dom.minidom import Document
# create xml document
document = Document()
# create root element
root = document.createElement("root")
document.appendChild(root)
# create child element
child = document.createElement("child")
child.setAttribute("tag", "test")
root.appendChild(child)
# insert some text
atext = document.createTextNode("Foo bar")
child.appendChild(atext)
# print created xml
print(document.toprettyxml(indent=" "))
答案 2 :(得分:2)
ElementTree附带Python 2.6:
from xml.etree import ElementTree as ET
root = ET.Element('root')
sub = ET.SubElement(root,'sub')
sub.text = 'Hello & Goodbye'
tree = ET.ElementTree(root)
tree.write('out.xml')
# OR
ET.dump(root)
<root><sub>Hello & Goodbye</sub></root>
答案 3 :(得分:1)