【问题标题】:Converting java xml sax event calls to an xml string将 java xml sax 事件调用转换为 xml 字符串
【发布时间】:2024-01-01 04:32:01
【问题描述】:

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 并在其上调用适当的方法来对数据进行编码。

【问题讨论】:

    标签: java xml serialization deserialization sax


    【解决方案1】:

    你想要:

    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 界面。

    【讨论】:

      最近更新 更多