子要素として 1 つの大きな XML に埋め込む必要がある小さな XML チャンクが多数あります。これらのチャンクをXMLStreamWriter
エスケープせずに書き込む方法はありますか?
4595 次
3 に答える
8
以下は、これを処理するためのいくつかのオプションです。
オプション #1 - 使用javax.xml.transform.Transformer
を使用して、XML フラグメントを表す を、をラップしているjavax.xml.transform.Transformer
に変換できます。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();
}
}
于 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 に答える