我有许多小的 XML 块,它们应该作为子元素嵌入到一个大的 XML 中。XMLStreamWriter
有没有办法在不转义的情况下将这些块写入?
问问题
4595 次
3 回答
8
以下是处理此问题的几个选项:
选项 #1 - 使用javax.xml.transform.Transformer
您可以使用 ajavax.xml.transform.Transformer
将StreamSource
表示您的 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 回答