Вопрос

Я создаю соответствующий синтаксический анализатор XML в C ++ и пытаюсь облегчить его использование в карманных компьютерах.

Сначала я решил добавить некоторые " события " моему парсеру, как это делает SAX, информируя об элементах, инструкциях по обработке и т. д.

Эти события принимаются производным классом, который создает дерево DOM для XML.

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

Например, я могу создать класс XMLEntityRef, который ссылается на некоторый XMLEntity, определенный в некотором объекте XMLDocType, как это делает .NET system.xml parser.

Как я знаю, для большинства целей приложению необходимо знать элемент, его содержимое, его соответствующие атрибуты и их соответствующие значения ... только строки ... ему все равно, формируется ли содержимое элемента объектами cdata , ссылки на сущности и / или простой текст ... то же самое относится к значениям атрибутов.

Итак, мой вопрос заключается в следующем: каково преимущество передачи приложению каждого XML-объекта в том виде, в котором он появляется, и возможности его (или вспомогательного класса) для создания, например, значения результирующего атрибута путем объединения текстов и разрешения ссылки на сущности?

Если я делаю опрос, пожалуйста, ответьте: должно ли ваше приложение знать о тегах cdata и о том, где они находятся в XML-файле, или вы упростите задачу ... вы хотите узнать полное значение содержимого элемент в строке, не беспокоясь о том, как он построен?

С уважением, Мауро Х. Легжери

Это было полезно?

Решение

  

Я создаю соответствующий синтаксический анализатор XML в C ++ и пытаюсь сделать его более легким

Нет такой вещи, как облегченный, соответствующий (не говоря уже о проверке) синтаксический анализатор. Чтобы быть соответствующим парсером, вы должны понимать все, что может быть использовано во внешнем подмножестве DTD, что действительно очень сложно. Обидно, что спецификация XML в конечном итоге утяжелена всеми несущими SGML DTD, но мы застряли с ней сейчас.

  

должно ли ваше приложение знать о тегах cdata и о том, где они находятся в xml-файле

Обычно нет. DOM Level 3 LS требует, чтобы разделы CDATA оставались узлами CDATASection в DOM по умолчанию, но приложения почти не заботятся.

(Если вопрос касается моего приложения, тогда да, потому что мое приложение - это система шаблонов, которая сохраняет разделы CDATA там, где они были. Но все же.)

  

Мои сомнения появляются, когда я пытаюсь работать с сущностями в основном

Бог да. Ссылки на сущности - это полная катастрофа. Заставить реализацию DOM поддержать их способом, совместимым с DOM Level 3 Core / LS, очень и очень сложно. Избегайте, если это вообще возможно.

Другие советы

Как правило, xml - это не легкий вес. Вам лучше с JSON.

При создании синтаксического анализатора я не думаю, что вы должны предполагать что-либо о том, как приложения будут использовать xml, а, скорее, предоставлять наиболее детальный уровень данных для каждого узла xml, чтобы обеспечить максимальную гибкость. Хотя для этого могут потребоваться дополнительные усилия со стороны потребляющих приложений, они смогут выполнять все, что им нужно. Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top