私はアプリケーションでXML文書をストリームするのにWoodstoxを使用しています。彼らが処理される前に、スキーマで定義された要素のデフォルト属性を設定する必要がありますが、Woodstoxでこれを行う唯一の方法は、既定の属性を書き込むいくつかのロジックを持つ余分なXMLStreamReaderを使って文書をメモリに読み込み、インメモリXML文書に変換し、インメモリ文書をビジネスロジックに渡します。Java:XMLStreamReader2で属性を設定しますか?
私はこれが好きではありません。私はドキュメントが潜在的に大きい可能性があり、私はアプリケーションでこれの複数のインスタンスを実行しているので、メモリフットプリントを低く保つために要素ごとにドキュメントをストリーミングしたいです。ドキュメントをストリーミングする際にXMLStreamReaderに属性を挿入する方法はありますか?
public class XMLPreProcessor extends StreamReader2Delegate {
public XMLPreProcessor(XMLStreamReader2 sr) {
super(sr);
}
//Skip over all processing instructions
//Can this be extended to inject attributes to elements?
@Override
public int next() throws XMLStreamException {
int eventType = super.next();
while(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION) {
eventType = super.next();
}
return eventType;
}
}
はこのデリゲートは、XMLStreamReader内に属性を注入するために微調整することができます:私はすでに、私はしばらくのストリーミングには興味がないんだノードをスキップする方法を発見しましたか?
デリゲートをXMLEventReaderでラップしてしまい、 'nextEvent()'メソッドをオーバーライドして、要素のデフォルト属性を注入しました。 XMLStreamReaderをオーバーライドするにはメソッドが多すぎます。実装固有であるため、ニッチな機能ではあまりにも多くの作業が必要です。 XMLEventReaderをオーバーライドする方が簡単ですし、実装を変更すると書き直しが簡単になります。 – user1428945