Добавление элемента XML с использованием StaX - PullRequest
1 голос
/ 31 августа 2011

У меня есть XML-документ, в котором я использую список пользовательских узлов.

Есть ли способ сделать следующее с помощью API StAX?

  1. обновить атрибут пароля [для измененияопция пароля]
  2. добавить новый пользовательский узел

1 Ответ

1 голос
/ 11 сентября 2011

По моему мнению, 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.

...