我有许多小的 XML 块,它们应该作为子元素嵌入到一个大的 XML 中。有没有办法将这些块写入
XMLStreamWriter
而不转义它们?
以下是处理此问题的几个选项:
javax.xml.transform.Transformer
您可以使用
javax.xml.transform.Transformer
将表示 XML 片段的 StreamSource
转换为包装您的 StAXResult
的 XMLStreamWriter
。
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();
}
}
woodstox 有一个 stax 实现,其 XMLStreamWriter2 类有一个 writeRaw() 调用。我们有同样的需求,这给了我们一个非常好的解决方案。
final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);
https://stackoverflow.com/a/34053012/22605338
在Linux机器上运行时不起作用。我收到错误消息,指出未注册的属性“escapeCharacters”。你能帮帮我吗?