ソースXMLファイルから複数のXMLノードをターゲットファイルにコピーしたいとします。ソースファイルとターゲットファイルの両方が非常に大きいので、StAXを使用します。次のように一般的に私はプロセスにしようとしているファイルが見えます:StAXResultでTransformerを呼び出すときにXML宣言を省略する
<root>
<header>
<title>A List of persons</title>
</header>
<person>
<name>Joe</name>
<surname>Bloggs</surname>
</person>
<person>
<name>John</name>
<surname>Doe</surname>
</person>
.
.
etc...
</root>
対象ファイルは、次の形式である必要があります。
各ファイルが ヘッダノード、正確に一つが含まれている必要があり<root>
<header>
<title>A List of persons</title>
</header>
<person>
<name>Joe</name>
<surname>Bloggs</surname>
</person>
</root>
人ノードはすべてルートノード内に囲まれています。ソースファイルからのTransformerインスタンスコピー断片に配線されているどちらも、私はにXMLStreamReaderを介してソースファイルを読み込むしようとしている、とてXMLStreamWriterを使用して、それを書く:
は今、私の問題は次のとおりです。ターゲットファイルに追加します。次のように変圧器が作成されますTransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StAXSource stAXSource = new StAXSource(reader);
StAXResult stAXResult = new StAXResult(writer);
Iはまた、XML入力ストリーム内の所望の断片にカーソルを移動させるカスタムメイドの方法があります。最後に、私は終わるようにするため
// Moves XMLStreamReader cursor to the next fragment.
moveCursorToNextFragment(XMLStreamReader reader, String fragmentNodeName)
を
// Open file as usual...
// Advance cursor to <header> node, and copy fragment till
// </header> to the output writer.
moveCursorToNextFragment(reader, "header");
transformer.transform(stAXSource, stAXResult);
// Advance cursor to <person> node, and copy fragment till
// </person> to the output writer.
moveCursorToNextFragment(reader, "person");
transformer.transform(stAXSource, stAXResult);
問題が生じたXMLファイルは、2つのXML宣言セクション、
の各呼び出しのための1つを含むことである。以下でtransformer.transform(stAXSource, stAXResult);
次のように私は、出力を変換するために
するStreamResultを使用してみましたが
:
transformer.transform(stAXSource, new StreamResult(myStream));
とXML宣言は省略されているが、私はStAXResultを使用してに戻って戻ったときに、XML宣言があります再び。私は、OutputKeys.OMIT_XML_DECLARATIONがオンかオフかにかかわらず(OutputKeys.STANDALONEの値が "yes"のような他の設定と同じように)効果がないことにも気付きました。
要するに、StAXResultを宛先として使用すると、Transformerでグローバルに設定されたこれらの設定は無視されているようです。
質問:Transformerは、Transformer.transform()の各呼び出し時にTransformerがXML宣言を発行しないように(XML宣言なしでフラグメントを書き込むなど)、これを実現する方法はありますか?
ご協力いただきありがとうございます。