Stax 및 XStream을 처음 사용했습니다. 거대한 XML 스트림에서 일반적인 요소를 unmarshall하려고합니다. (비 정렬 화하려면 150 만에서 250 만 개의 요소가있을 수 있습니다)StAX에서 XStream 파싱 부분 입력을 만드는 방법
Stax로 스트림을 파싱하여 관심있는 요소로 가져온 다음 xStream 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 객체를 만들지 않습니다. 내 코드에서 무엇을 놓치셨습니까?
감사합니다. 그것은 작동하지만 그 다음에 내가 분석하고 싶은 요소 앞에 하나의 요소를 멈추게해야합니다. 사람이 첫 번째 자녀로 몇 가지 선택 요소를 포함 할 수 있다면 어떨까요? StAX reader API는 "look ahead"메소드를 제공하지 않습니다. – Bassam