Передача неизвестных элементов XML в парсер SAX - PullRequest
1 голос
/ 30 октября 2008

Я загружаю некоторые данные из документа XML, изменяю их и записываю обратно в XML. Чтение выполняется с использованием библиотеки синтаксического анализатора SAX, а запись - с помощью специального кода. Иногда файл изменяется внешне, и добавляются дополнительные элементы (например, ссылки на таблицы стилей). Вместо того, чтобы терять эти дополнительные элементы при загрузке и сохранении файла, я хотел бы пройти через любые неизвестные теги, чтобы они выглядели

Когда неизвестные элементы отделены от интерпретируемых элементов, будет просто сохранить неизвестные элементы и атрибуты в виде строк и вывести их впоследствии, но когда они перемежаются и вкладываются в интерпретируемые элементы, это становится менее очевидным.

Кто-нибудь может предложить краткий способ сделать это? Было бы проще переключиться на парсер DOM? Производительность не проблема.

NB. Я работаю в C ++ с Gnome Glib :: Markup :: Parser, но предпочел бы независимые от языка / библиотеки ответы.

Ответы [ 2 ]

1 голос
/ 30 октября 2008

Я не знаю, как вы написали свой обработчик контента, но его методы должны вызываться для всех событий, в том числе для внешних изменений, которые вы хотите сохранить. Ваши обратные вызовы startElement() и endElement() могут проверять имя и атрибуты элемента, чтобы решить, следует ли вызывать специализированные методы для элементов, подлежащих изменению, но по умолчанию просто реконструируют и выводят событие, для которого был вызван обратный вызов. Таким образом, любые элементы, которые вы специально не обрабатываете, просто получают вывод по умолчанию.

Вы также можете сделать то же самое в XSLT. Возьмите преобразование идентичности (таблицу стилей, которая выводит именно то, что дано для ввода) и добавьте в нее шаблоны с более конкретными выражениями соответствия для пользовательских модификаций. Я считаю, что с XSLT легче работать для большинства приложений, чем с SAX или DOM.

0 голосов
/ 31 октября 2008

Я считаю, что SAX - это неправильный путь, когда вы хотите изменить XML-файл и сохранить его после изменения в другом файле. Мой совет - использовать DOM. Он загрузит весь файл (включая изменения, сделанные внешне), так что вам просто нужно подумать о том, что вы хотите сделать. Когда все будет сохранено, все вернется на место.

...