C++. Сборник рецептов
Шрифт:
В примере 13.8 приводится функция
Выполнение примера 13.8 на вашем компьютере может дать результат как совпадающий, так и не совпадающий с приведенным мною, — это зависит от используемого
Глава 14
XML
14.0. Введение
Язык XML играет важную роль во многих областях, в том числе при хранении и поиске информации, в издательском деле и при передаче данных по сетям; в данной главе мы научимся работать с XML в С++. Поскольку эта книга больше посвящена С++, чем XML, я полагаю, вы уже имеете некоторый опыт применения различных технологий, связанных с XML, например SAX, DOM, XML Schema, XPath и XSLT. He стоит беспокоиться из-за того, что вы не являетесь экспертом во всех этих областях; приводимые в данной главе рецепты достаточно независимы друг от друга, поэтому вы можете пропустить некоторые из них и все-таки понять остальные. Во всяком случае, каждый рецепт дает краткое описание концепций XML и используемого ими инструментария.
Если вы имеете достаточный опыт программирования на другом языке, например на Java, вы можете предположить, что средства обработки документов XML входят в состав стандартной библиотеки С++. К сожалению, XML делал только первые шаги, когда стандарт C++ был уже принят, и хотя добавление средств обработки документов XML в новую версию стандартной библиотеки C++ вызывает большой интерес, в настоящее время вам придется полагаться на несколько доступных в C++ великолепных библиотек XML, поставляемых независимыми разработчиками.
Возможно, перед началом чтения рецептов вы захотите скачать из Интернета и установить библиотеки, которые будут рассмотрены в настоящей главе. В табл. 14.1 приводятся домашние страницы каждой библиотеки, а в табл. 14.2 указано назначение каждой библиотеки и ссылки на рецепты, в которых они используются. В таблицах не указаны точные версии различных спецификаций и рекомендаций XML, реализованные каждой библиотекой, поскольку эта информация, вероятно, изменится в ближайшем будущем.
Табл. 14.1. Библиотеки C++ для XML
Имя библиотеки | Домашняя страница |
---|---|
TinyXml | www.grinninglizard.com/tinyxml |
Xerxes | xml.apache.crg/xerces-c |
Xalan | xml.apache.org/xalan-c |
Pathan 1 | software.decisionsoft.com/pathanIntro.html |
Boost.Serialization | www.boost.org/libs/serialization |
Табл. 14.2.
Имя библиотеки | Назначение | Рецепты |
---|---|---|
TinyXml | DOM (нестандартная версия) | Рецепт 14.1 |
Xerxes | SAX2, DOM, XML Schema | Рецепты 14.2-14.8 |
Xalan | XSLT, XPath | Рецепты 14.7-14.8 |
Pathan | XPath | Рецепт 14.8 |
Boost.Serialization | Сериализация XML | Рецепт 14.9 |
14.1. Синтаксический анализ простого документа XML
Имеется некоторая совокупность данных, хранимых в документе XML. Требуется выполнить синтаксический анализ документа и превратить эти данные в объекты C++. Документ XML имеет достаточно небольшой размер и может поместиться в оперативной памяти, причем в документе не используется внутреннее определение типа документа (Document Type Definition — DTD) и отсутствуют пространства имен XML.
Используйте библиотеку
Например, предположим, что у вас имеется XML-документ animals.xml, описывающий некоторое количество животных цирка, как показано в примере 14.1. Корень документа имеет имя
Пример 14.1. Документ XML со списком животных цирка