Небольшие изменения в документ XML с помощью StAX

голоса
5

В настоящее время я пытаюсь читать в файле XML, сделать некоторые незначительные изменения (изменить значения некоторых атрибутов), и записать его обратно.

Я намеревался использовать анализатор StAX ( javax.xml.stream.XMLStreamReader) для чтения в каждом случае, посмотреть , если это был один я хотел изменить, а затем передать его прямо на писателя StAX ( javax.xml.stream.XMLStreamReader) , если не требовалось никаких изменений.

К сожалению, это не выглядит так просто - писатель не имеет возможности принять тип события и объект парсера, только такие методы , как writeAttributeи writeStartElement. Очевидно , что я мог бы написать большое заявление переключателя с футляром для каждого возможного типа элемента , который может произойти в документе XML, а просто записать его обратно снова, но это , кажется , как много проблем для чего - то, кажется , что это должно быть простым ,

Есть ли что-то я пропускаю, что делает его легко выписать очень похожий XML документ, который вы читали в с StAX?

Задан 14/08/2008 в 03:22
источник пользователем
На других языках...                            


3 ответов

голоса
3

После немного отвода вокруг, ответ, кажется, чтобы использовать версии событий для чтения / записи, а не версии потока.

(Т.е. javax.xml.stream.XMLEventReader и javax.xml.stream.XMLEventWriter)

Смотрите также http://www.devx.com/tips/Tip/37795 , что и в конце концов заставил меня двигаться.

Ответил 14/08/2008 d 05:13
источник пользователем

голоса
2

Я знаю, что это довольно старый вопрос, но если кто-то ищет что-то вроде этого, есть еще одна альтернатива: Woodstox Stax2 расширение API имеет метод:

XMLStreamWriter2.copyEventFromReader(XMLStreamReader2 r, boolean preserveEventData) 

которая копирует в настоящее время отметил, в случае с потоком чтения с использованием потока писателя. Это не только простое, но очень эффективное. Я использовал его для подобных модификаций с успехом.

(? Как получить XMLStreamWriter2 и т.д. Все Woodstox Поставляемые примеры реализации этих расширенных версий - плюс есть обертки в случае, если кто-то хочет использовать «базовые» варианты Stax, а)

Ответил 10/08/2010 d 21:12
источник пользователем

голоса
2

StAX работает очень хорошо и очень быстро. Я использовал его в проект для синтаксического анализа XML-файлов, которые до 20Мб. У меня нет тщательного анализа, но это определенно быстрее, чем SAX.

Что касается вашего вопроса: Разница между потоковым и обработкой событий, AFAIK это контроль. С потоковым API вы можете пройти через ваш шаг за шагом документа и получить содержимое вы хотите. В то время как API на основе событий можно обрабатывать только то, что вы заинтересованы в.

Ответил 14/08/2008 d 06:52
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more