Комментарии XML читаются как дочерние узлы

У меня есть код, который читается в файле xml в качестве входных данных для компьютерной модели (написан на C++ и скомпилирован с использованием VS2012). После обновления формата XML некоторых входных данных программа перестала считывать файл в его новом формате (код был изменен, чтобы приспособиться к новому формату данных), и после расследования стало ясно, что это произошло потому, что новый формат данных включал комментарии в файле XML, которые синтаксический анализатор xml (msxml6) считал дочерними узлами. Следовательно, первый дочерний узел, который он прочитал, не мог понять, и программа завершила работу, как и было задумано.

Хотя сейчас мы исправили проблему (путем удаления ненужных комментариев из XML-файла), мне интересно, знает ли кто-нибудь, почему синтаксический анализатор считает комментарии дочерними узлами? У меня сложилось впечатление, что парсеры должны игнорировать комментарии?


person Mark Gould    schedule 31.01.2018    source источник
comment
Это не секретность, просто код не имеет отношения к моему вопросу - весь первый раздел был добавлен только для контекста. У меня есть решение исходной проблемы, и теперь я пытаюсь понять, почему проблема возникла в первую очередь.   -  person Mark Gould    schedule 31.01.2018


Ответы (1)


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

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

Удаление комментариев из документа перед его передачей в приложение является одним из способов решения проблемы (это очень простое XSLT-преобразование), но было бы лучше, если бы приложение изначально было написано для обработки комментариев.

person Michael Kay    schedule 31.01.2018