StaxとXStreamを初めて使用しています。私は巨大なXMLストリームからのいくつかの共通の要素を非整列しようとしています(非整列化のために150万から250万の要素があるかもしれません)StAXからXStreamパーシャルパーサーを入力する方法
私はStaxにストリームを解析して要素を取得し、 XMLをEndElementまでアンマーシャリングします。
XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(fis);
while (reader.hasNext()) {
if (reader.isStartElement() && reader.getLocalName().toLowerCase().equals("person")) {
break;
}
reader.next();
}
StaxDriver sd = new StaxDriver();
AbstractPullReader rd = sd.createStaxReader(reader);
XStream xstream = new XStream(sd);
xstream.registerConverter(new PersonConverter());
Person p = (Person) xstream.unmarshal(rd);
私はこれで問題テスト入力 <Persons> <Person> <name>A</name> </Person> <Person> <name>B</name> </Person> <Person> <name>C</name> </Person> </Persons>
を作成し、最初に私のコンバータが呼び出されていないということです。次に、Personの要素 "name"に対してCannotResolveClassExceptionを取得し、XStreamはPersonオブジェクトを作成しません。 私のコードで何が欠けていましたか?
ありがとうございます。それは機能しますが、私は解析したい要素の前に一つの要素を止めるように強制されます。 Personが最初の子としていくつかのオプション要素を含む場合はどうでしょうか? StAXリーダーAPIは、先読みメソッドを提供していません。 – Bassam