[英]How to write unescaped XML to XMLStreamWriter?
我有一些小的XML块,应该作为子元素嵌入到一个大的XML中。 有没有办法将这些块写入XMLStreamWriter
而不转义它们?
以下是处理此问题的几个选项:
javax.xml.transform.Transformer
您可以使用javax.xml.transform.Transformer
将表示XML片段的StreamSource
转换为包装XMLStreamWriter
StAXResult
。
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.