5

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

4

3 回答 3

8

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

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

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

选项 #2 - 直接与OutputStream

或者,您可以执行以下操作。您可以利用flush()来强制XMLStreamWriter输出其内容。然后您会注意到,xsw.writeCharacters("")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();
    }

}
于 2013-11-15T11:54:19.383 回答
3
final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);

从这里

于 2015-12-02T21:08:10.787 回答
2

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

于 2014-03-27T15:22:43.263 回答