从python简单输出xml

从python简单输出xml,python,xml,Python,Xml,我需要以一种非常简单的方式从python输出XML: 除了Python 2.6.5中已有的库之外,我无法使用任何外部库 我需要输出没有属性的XML标记和文本内容 此时,我正在使用print语句显式打印出尖括号标记,唯一真正阻止我的是转义标记中的文本,我不知道如何做 有什么建议吗 更新:是否有类似Java的Python版本?我可能需要生成一个大型XML文档,而不需要(或不希望)将整个文档保存在内存中 更新#2:除了和&之外,我还需要对文本中的随机unicode或非ASCII字符进行转义,如果

我需要以一种非常简单的方式从python输出XML:

  • 除了Python 2.6.5中已有的库之外,我无法使用任何外部库
  • 我需要输出没有属性的XML标记和文本内容
此时,我正在使用print语句显式打印出尖括号标记,唯一真正阻止我的是转义标记中的文本,我不知道如何做

有什么建议吗


更新:是否有类似Java的Python版本?我可能需要生成一个大型XML文档,而不需要(或不希望)将整个文档保存在内存中

更新#2:除了
&
之外,我还需要对文本中的随机unicode或非ASCII字符进行转义,如果任务如此简单,可能就足够了。下面是一个简短的例子:

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="    "))
如果任务如此简单,可能就足够了。下面是一个简短的例子:

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="    "))
随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)
输出
Hello&;再见
随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)
输出
Hello&;再见

看来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!")
导入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>

宾戈汉姆3号!

看来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!")
导入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>

宾戈汉姆3号!

+1为快速示例。我不能在我的特定应用程序中使用它,因为我有一个潜在的大XML文件要生成,不需要在内存中保存/操作DOM样式的XML对象。我不能将其用于我的特定应用程序,因为我有一个潜在的大XML文件要生成,不需要在内存中保存/操作DOM样式的XML对象。这只会转义
&
以及特定的实体。如果我有任何随机的unicode或ASCII字符,我也需要对它们进行转义。这只会转义
&
以及特定的实体。如果我有任何随机的unicode或ASCII字符,我也需要转义它们。为什么你认为你需要转义“随机”unicode或非ASCII字符?你不能用UTF-8编码吗?为什么你认为你需要转义“随机”unicode或非ASCII字符?你不能仅仅用UTF-8编码它吗?你需要使用
x=xml.sax.saxutils.XMLGenerator(文件,“UTF-8”)
,并且你需要以一种被认为是非随机的方式为它提供
unicode
对象(或者
str
仅包含ASCII的对象)。如果您有一些传统编码中的文本,例如cp1252,那么在将其填充到
x.characters()
之前对其进行解码。同样为了便于移植,您应该在文件open()调用中使用“wb”。您需要使用
x=xml.sax.saxutils.XMLGenerator(文件,“UTF-8”)
,并且需要为其提供
unicode
对象(或仅包含ASCII的
str
对象)以非随机方式。如果您有一些传统编码的文本,例如cp1252,则在将其填充到
x.characters()
中之前对其进行解码。此外,为了便于移植,您应该在文件open()调用中使用“wb”。