从python简单输出xml

时间:2010-12-22 17:53:27

标签: python xml

我需要以极简主义的方式从python输出XML:

  • 除了Python 2.6.5中已有的外,我不能使用任何外部库。
  • 我需要输出没有属性的XML标签和文本内容

此时我正在使用print语句明确打印出尖括号标签,唯一真正阻止我的是在标签内转义文本,我不知道该怎么做。

有什么建议吗?


更新:对于Python,Java有StAX XMLStreamWriter吗?我可能有一个大的XML文档要生成,我不需要(或想要)将整个文档保存在内存中。

更新#2:我还需要在<>&之外的文本中转义随机unicode或非ASCII字符。

4 个答案:

答案 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 &lt; 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 &amp; Goodbye</sub></root>

答案 3 :(得分:1)