XML に問題があり、ファイル退避、かつ、問題箇所以降のXML を読み込みたい。
[ 検討結果 ]
ファイル退避、もしくはXML の読み込みのどちらかを選択する必要がある。 両方実施したい場合は、自前パーサーを作成する必要がある。
[ 処理内容 ]
前提として、reader は元から存在するものとし、XML 情報を持つとする。
StringWriter sw と、XMLStreamWriter writer を準備して、Transformer class を利用して、 transform method をCall するとsw にXML 情報が入力される。
これをtoString() してあげれば、XML の出力が可能。
しかし、問題点があり、transform() をCall すると、XMLStreamReader reader の情報がすべて失われてしまう。
そのため、XML のある1箇所に問題があり、すべてのXML を出力、かつ、問題の箇所以降のXML を再読み込みすることができない。
DeepCopy もできないため(*1)、2回XML の読み込みをしたい場合は、StringWriter にすべて書きだした後に、 自前のパーサーを作って処理を実行しないといけない。
*1) http://stackoverflow.com/questions/9837861/how-to-remember-xmlstreamreader-position-in-xml-with-stax
public void parse(XMLStreamReader reader){
StringWriter sw = new StringWriter();
StAXSource source = new StAXSource( reader );
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory();
XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
XMLStreamWriter writer;
String rawxml = null;
try {
XMLStreamReader re = xmlInputFactory.( reader );
writer = xmlOutputFactory.createXMLStreamWriter( sw );
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
StAXResult result = new StAXResult( writer );
t.transform( source, result );
rawxml = sw.toString();
} catch ( XMLStreamException e ) {
e.printStackTrace();
} catch ( TransformerConfigurationException e ) {
e.printStackTrace();
} catch ( TransformerException e ) {
e.printStackTrace();
}
}
0 件のコメント:
コメントを投稿