如何将非转义XML写入XMLStreamWriter?

And*_*nko 5 java xml stax

我有一些小的XML块,应该作为子元素嵌入到一个大的XML中.有没有办法在XMLStreamWriter没有逃避它们的情况下编写这些块?

bdo*_*han 7

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

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

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

选项#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();
    }

}
Run Code Online (Sandbox Code Playgroud)