繁体   English   中英

如何将非转义XML写入XMLStreamWriter?

[英]How to write unescaped XML to XMLStreamWriter?

我有一些小的XML块,应该作为子元素嵌入到一个大的XML中。 有没有办法将这些块写入XMLStreamWriter而不转义它们?

以下是处理此问题的几个选项:

选项#1 - 使用javax.xml.transform.Transformer

您可以使用javax.xml.transform.Transformer将表示XML片段的StreamSource转换为包装XMLStreamWriter StAXResult

选项#2 - 直接与OuputStream

或者,您可以执行以下操作。 您可以利用flush()强制XMLStreamWriter输出其内容。 然后你会注意到我执行xsw.writeCharacters("")这会强制start元素以bar结束,然后再将嵌套XML作为String写入。 需要刷新下面的示例代码以正确处理编码问题。

import java.io.*;
import javax.xml.stream.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        OutputStream stream = System.out;

        XMLOutputFactory xof = XMLOutputFactory.newFactory();
        XMLStreamWriter xsw = xof.createXMLStreamWriter(stream);

        xsw.writeStartDocument();
        xsw.writeStartElement("foo");
        xsw.writeStartElement("bar");

        /* Following line is very important, without it unescaped data 
           will appear inside the <bar> tag. */
        xsw.writeCharacters("");
        xsw.flush();

        OutputStreamWriter osw = new OutputStreamWriter(stream);
        osw.write("<baz>Hello World<baz>");
        osw.flush();

        xsw.writeEndElement();
        xsw.writeEndElement();
        xsw.writeEndDocument();
        xsw.close();
    }

}

woodstox有一个stax实现,他们的XMLStreamWriter2类有一个writeRaw()调用。 我们有同样的需求,这给了我们一个非常好的解决方案。

final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);

从这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM