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