将java xml sax事件调用转换为xml字符串

时间:2018-06-23 05:34:31

标签: java xml serialization deserialization sax

java xml sax api是否提供ContentHandler子类,它将事件调用转换为xml字符串。例如,对该处理程序的以下调用应产生以下xml

XMLPrinterHandler h;
String data = "hello";
h.startDocument();
h.startElement("", "element", "element", new Attributes());
h.characters(h.toCharArray(), 0, h.size());
h.endElement("", "element", "element");
h.endDocument();
System.out.println(h.getXml());

这应该打印:

<element>hello</element>

我正在处理一些将某些数据编码为xml的代码,并且想知道中间输出。编码类接受一个ContentHandler并对其调用适当的方法来对数据进行编码。

1 个答案:

答案 0 :(得分:0)

您要

SAXTransformerFactory f = new SAXTransformerFactory();
TransformerHandler t = new f.newTransformerHandler();
t.setResult(System.out);
t.startDocument();
etc

TransformerHandler执行从SAX输入到词法XML输出的“空转换”。

您也可以使用

h.getTransformer().setOutputProperty()

可以根据XSLT规范中定义的属性来设置序列化属性,例如缩进。 (标准的JDK TransformerHandler为您提供XSLT 1.0序列化属性,如果您想在XSLT 3.0中定义扩展集以及Saxon扩展,请使用Saxon实现。)

我个人发现,将Java代码作为SAX ContentHandler接口的直接客户端编写非常笨拙。我更喜欢XMLStreamWriter界面。