在Python中使用SAX写XML
在查看Python的SAX文档时,我发现里面只讲了如何用SAX来读取 XML。但我想要写 XML。
我之前在Java中已经搞明白了怎么做:
public void renderXML(OutputStream out) {
PrintWriter pw = new PrintWriter(out);
StreamResult streamResult = new StreamResult(pw);
SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler hd = tf.newTransformerHandler();
Transformer serializer = hd.getTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
serializer.setOutputProperty(OutputKeys.METHOD,"xml");
serializer.setOutputProperty(OutputKeys.INDENT, "yes"); // So it looks pretty in VI
hd.setResult(streamResult);
hd.startDocument();
AttributesImpl atts = new AttributesImpl();
atts.addAttribute("", "", "someattribute", "CDATA", "test");
atts.addAttribute("", "", "moreattributes", "CDATA", "test2");
hd.startElement("", "", "MyTag", atts);
String curTitle = "Something inside a tag";
hd.characters(curTitle.toCharArray(), 0, curTitle.length());
hd.endElement("", "", "MyTag");
hd.endDocument();
}
那么在Python中应该怎么做呢?我查了一下StackOverflow上的一个回答,它使用了ElementTree,但那更像是DOM的做法(对于非常大的输出来说,这种方法会有问题)。还有另一个问题没有人回答。那么,在Python中写出XML的更好方法是什么呢?
2 个回答
0
我不知道在Python中有没有直接像SAX那样的方法,不过我写了一个库,可能对你有帮助。这个库提供了一些方法,可以用来打开和关闭元素,创建处理指令、注释、文档类型等。它有很多高级功能,比如跟踪当前有哪些元素和继承的xml:lang值(如果有的话),为你处理所有的转义(甚至是属性中的%xx转义),还有像“closeToElement(type)”这样的功能。我觉得用这个库从Python生成符合规范的XML会简单很多。如果你感兴趣,可以在这里找到它:http://www.derose.net/steve/utilities/PY/XmlOutput.py。
1
你可以查看这个链接 https://docs.python.org/3/library/xml.sax.handler.html,里面有关于Python中处理XML文件的内容。还有,如果你想看看用 OSIS XML 格式的圣经示例,可以参考这个脚本 this script。