大きなXMLファイルを作成するために、StAX APIを使用することにしました。基本的な構造は、低レベルのAPI createStartDocument()、createStartElement()を使用して構築されます。これは期待どおりに動作します。既に文書の開始を作成したXmlEventWriter(StAX)にXML(String)を追加する方法
ただし、String(データベースから取得)に存在する既存のXMLデータを追加する場合があります。
- Woodstox::次の例外がスローされます。「出力XMLができない実装によっては、我々が期待した結果を取得されていません、上記のコードでは
import java.lang.*; import java.io.*; import javax.xml.stream.*; public class Example { public static void main(String... args) throws XMLStreamException { XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); XMLInputFactory inputFactory = XMLInputFactory.newInstance(); XMLEventFactory eventFactory = XMLEventFactory.newInstance(); StringWriter writer = new StringWriter(); XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(writer); eventWriter.add(eventFactory.createStartDocument("UTF-8", "1.0")); eventWriter.add(eventFactory.createStartElement("ns0", "http://example.org", "root")); eventWriter.add(eventFactory.createNamespace("ns0", "http://example.org")); //In here, we want to append a piece of XML which is stored in a string variable. String xml = "<fragments><fragment><data>This is pure text.</data></fragment></fragments>"; eventWriter.add(inputFactory.createXMLEventReader(new StringReader(xml))); eventWriter.add(eventFactory.createEndDocument()); System.out.println(writer.toString()); } }
:次のスニペットは、このことを示しています宣言、出力は既に完了しています。 XMLEventReaderはstartDocumentイベントで開始されたようですが、startDocumentイベントはプログラム的に既にトリガーされているため、エラーがスローされます。
- JDK:それは
<?xml version="1.0" ... <fragments><fragment>...
を追加します - これは無効なXMLにつながります。
私も使用して、XMLを追加することを試みた:
eventFactory.createCharacters(xml);
ここでの問題は、XMLが添付されていても、<および>を& LTおよび& GTに変換されることです。したがって、無効なXMLが返されます。
私は単にXMLとしてStringを追加できるAPIがありませんか?
あなたは真のライブセーバーです!それが私の目の前にあったことを知りたければO_o – Quirexx
最後にEndDocumentイベントをスキップしなければならないので、FilteredEventReaderを作成しました。それ以外の場合は、完全なxmlを終了します。 – Quirexx
この例を使用すると、この例外が発生します。javax.xml.stream.XMLStreamException:開いている開始要素がありません。終了要素を書き込もうとしています –