Чтение XML выглядит просто, но правильное его выполнение включает в себя несколько сложностей, с которыми вы действительно не хотите иметь дело.На самом деле, написание простого синтаксического анализатора XML фактически означает создание еще одной библиотеки XML.Я сделал это, и неполная версия этого находится где-то на моем диске.Даже если вам не нужно проверять свою структуру XML:
- независимо от того, проверяете вы это или нет, вам нужно иметь дело с ссылками на сущности, такими как
<
, и с различными ссылками на сущности символов, такими как A
и 

- простое тело документа XML является относительно простым, но заголовок представляет собой серьезную проблему, в частности DTD: есть две его версии, которые немного отличаются, и вам, вероятно, необходимо обработатьвстроенный DTD
- даже тело не совсем тривиально из-за этих раздражающих сегментов данных символов
- , даже без проверки вам может потребоваться поддержка ссылок на внешние сущности
- , чтобы символы былиПринятые и / или отклоненные для различных частей XML также несколько интересны.
- Обратите внимание, что XML определен в терминах Юникода, и правильная обработка этого также не совсем тривиальна: просто с помощью
char
или wchar_t
просто не обрезает.
Первая реализованная мною версия была миленькойrator намеревался выскочить все встреченные элементы.Это дало возможность легко остановить и продолжить анализ по выбору пользователя итератора.К сожалению, я не получил его при попытке скопировать с различными ссылками на сущности.Он бы хорошо и быстро разбирал простые XML-файлы, но некоторые странности в спецификации я просто не понял.
Для меня лучше всего было создать простой рекурсивный приличный синтаксический анализатор в сочетании с подходящим стеком буферов, чтобы несколькопрозрачно иметь дело со ссылками на сущности.Однако, чтобы закончить это полностью, мне все еще нужно разобраться с некоторыми проблемами кодирования, и в итоге у меня просто были проекты с более высоким приоритетом для работы (в свободное время, то есть).
В итоге: это может бытьсделано, очевидно, как и другие.Возможно, это несколько бессмысленное упражнение, если у вас нет действительно яркой идеи, которая делает вашу реализацию уникально лучше, чем альтернативы.