5

子要素として 1 つの大きな XML に埋め込む必要がある小さな XML チャンクが多数あります。これらのチャンクをXMLStreamWriterエスケープせずに書き込む方法はありますか?

4

3 に答える 3

8

以下は、これを処理するためのいくつかのオプションです。

オプション #1 - 使用javax.xml.transform.Transformer

を使用して、XML フラグメントを表す を、をラップしているjavax.xml.transform.Transformerに変換できます。StreamSourceStAXResultXMLStreamWriter

オプション #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 に答える