У меня есть некоторый код, который читает в файле XML как входные данные для модели компьютера (написанный на C ++ и скомпилированный с использованием VS2012). После обновления в формате XML некоторых входных данных программное обеспечение прекратило чтение файла в его новом формате (код был изменен в соответствии с новым форматом данных), и после исследования выяснилось, что это произошло потому, что новые Формат данных включал комментарии в файл XML, который синтаксический анализатор xml (msxml6) считал дочерними узлами. Следовательно, первый дочерний узел, который он прочитал, не смог понять, и программное обеспечение вышло, как было задумано.
Хотя сейчас мы исправили проблему (удалив необязательные комментарии из файла XML), мне было интересно, знает ли кто-нибудь, почему анализатор считает комментарии дочерними узлами? Я был под впечатлением, что комментарии должны были игнорироваться парсерами?
В большинстве древовидных моделей XML (например, DOM) комментарии действительно являются дочерними узлами содержащего элемента, и приложение должно убедиться, что они пропущены при чтении дерева.
Распространенная ошибка — забывать об этом и думать, что при тестировании приложения на исходных документах без комментариев оно продолжит работать, если отправитель решит включить комментарии.
Удаление комментариев из документа перед его передачей в приложение является одним из способов решения проблемы (это очень простое преобразование XSLT), но было бы лучше, если бы приложение было написано для обработки комментариев в первую очередь.
Других решений пока нет …