如何将未转义的 XML 写入 XMLStreamWriter?

问题描述 投票:0回答:4

我有许多小的 XML 块,它们应该作为子元素嵌入到一个大的 XML 中。有没有办法将这些块写入

XMLStreamWriter
而不转义它们?

java xml stax
4个回答
8
投票

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

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

您可以使用

javax.xml.transform.Transformer
将表示 XML 片段的
StreamSource
转换为包装您的
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();
    }

}

2
投票

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


2
投票
final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);

从这里开始


0
投票

https://stackoverflow.com/a/34053012/22605338

在Linux机器上运行时不起作用。我收到错误消息,指出未注册的属性“escapeCharacters”。你能帮帮我吗?

© www.soinside.com 2019 - 2024. All rights reserved.