По моему мнению, StAX - не самый простой способ сделать то, что вы просите.Однако ...
Интерфейс XMLStreamReader имеет метод getLocation()
, поэтому при обнаружении интересующей вас части строки XML вы можете сохранитьСписок действий, которые необходимо выполнить после, вместе с местом, где вы должны их выполнить.
Итак, в грубом псевдокоде:
while (parsing) {
int event = xmlStreamReader.next();
if (isEventPasswordAttribute(event)) {
// create an Action to update password attribute,
// passing in xmlStreamReader.getLocation() and other necessary parameters
} else if (isTimeToAddNewUserNode(event)) {
// create an Action to add new user
// passing in xmlStreamReader.getLocation() and other necessary parameters
}
} // end parse
...
for (Iterator<Action> it = actions.iterator(); it.hasNext(); ) {
Action action = it.next();
action.perform();
}
Движению конечно нужно передать ссылкук исходной XML-строке / потоку, чтобы обновить его.Для строки это должно быть легко.Для потока, возможно, нет, так как после того, как поток был прочитан в первый раз, он может быть не в состоянии reset()
.Возможно, вам придется буферизовать все содержимое самостоятельно, когда вы выполняете исходный анализ.И вам следует быть осторожным, чтобы действия не изменили местоположения, в противном случае последующие действия будут смотреть не на то место в потоке XML.