Чтение онлайн

ЖАНРЫ

Программирование на Visual C++. Архив рассылки

Jenter Алекс

Шрифт:

• Файлы. Здесь вы найдете самые различные утилиты, библиотеки, классы, готовые компоненты и множество других полезных файлов, доступных для скачивания.

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

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

Конечно, сайт еще только-только родился, и поэтому материалов на нем пока не очень много. Но база будет постоянно пополняться и, надеюсь, достаточно быстро.

Пара слов о рассылке. Рассылка теперь

стала частью проекта RSDN. Это значит, что начиная со следующей недели, в ней будут публиковаться самые отборные и интересные материалы сайта, посвященные программированию на Visual C++. А уже сейчас на сайт выложен полный архив рассылки, где собраны практически все выпуски, вышедшие за время ее существования.

Что еще хочу заметить. На нашем сайте НЕТ БАННЕРОВ. Это полностью некоммерческий проект, именно поэтому вы не найдете на наших страницах никакой рекламы.

И еще – наше специальное предложение. RSDN – некоммерческий проект, и таковым и останется. Его авторы порой находятся в разных уголках Земли. Мы приглашаем и вас присоединиться к нашей команде. Мы обладаем технической возможностью разместить значительно большее количество материалов и разделов. У сайта есть хороший движок, отличный дизайн, форум, качественный хостинг, ведется разработка новых сервисов, все это будет и в вашем распоряжении, если вы решите примкнуть к RSDN. Например, вы могли бы открыть новый раздел на RSDN и стать его ведущим. Объединившись, значительно проще раскручивать и развивать ресурс.

Если вас заинтересовало это предложение, обращайтесь за дополнительной информацией по адресу team@rsdn.ru. Мы открыты для любых начинаний.

Ну ладно, что дальше говорить, когда надо смотреть! Итак, приглашаю всех познакомиться с новым сайтом, созданным программистами для программистов, познакомиться с RSDN!

Алекс Jenter jenter@rsdn.ru RSDN Developer

Программирование на Visual C++

Выпуск №41 от 22 апреля 2001 г.

Добрый день, уважаемые подписчики!

Ну что ж, похоже старт у проекта RSDN получился достаточно хороший, особенно если судить по вашим откликам. Большое спасибо всем, кто заглянул на сайт – я уверен, что вы не остались разочарованы. А тем, кто еще не видел RSDN, настоятельно рекомендую посмотреть – наверняка вы найдете что-то интересное для себя. К тому же теперь на сайте появилась полноценная поисковая система.

Как я и обещал, с этого выпуска рассылка начинает публиковать статьи из RSDN, касающиеся программирования на Visual C++. Но не надо думать, что рассылка будет вам бесполезной, если вы регулярно читаете статьи на сайте. Рассылка будет экономить ваши усилия и ваше время; кроме того, некоторые статьи в рассылке будут появляться даже раньше, чем на сайте. 

СТАТЬЯ 

Использование парсера MSXML для работы с XML-документами

Автор: Кен Скрибнер (Kenn Scribner)

Перевод: Александр Шаргин

Источник: "Visual C++ Developer", Ноябрь 2000

Демонстрационный проект XMLNodeExerciser 

Парсер MSXML основывается на объектной модели документа XML (XML Document Object Model, XML DOM). Поэтому важно в первую очередь рассмотреть различные объекты, связанные с документом. Они приведены в таблице 1. Эти объекты позаимствованы прямо из спецификаций XML. MSXML предпренимает дополнительные усилия для стыковки объектов XML DOM с моделью COM. Благодаря этому достаточно просто установить, какому объекту модели XML DOM соответствует тот или иной COM-интерфейс MSXML. Например, IXMLDOMNode представляет DOM-объект Node (узел).

Таблица 1. Объекты XML DOM и их использование

Объект DOM Назначение
DOMImplementation Объект, который можно запросить об уровне поддержки модели DOM
DocumentFragment Представляет часть дерева (хорошо подходит для операций Вырезать/Вставить)
Document Представляет узел верхнего уровня в дереве
NodeList Объект-итератор для доступа к узлам XML
Node Расширяет базовое понятие помеченного элемента (tagged element) в XML
NamedNodeMap Поддержка
пространства имён и итерации для коллекций атрибутов
CharacterData Объект для манипулирования текстом
Attr Представляет атрибут(ы) элемента
Element Узел, представляющий элемент XML (удобен для доступа к атрибутам)
Text Представляет текст, содержащийся в элементе или атрибуте
CDATASection Используется для отключения разбора и валидации некоторых разделов XML
Notation Содержит нотацию, расположенную в DTD (Document Type Definition, описание типов документа) или в схеме
Entity Представляет разобранную или неразобранную сущность
EntityReference Представляет узел, ссылающийся на некоторую сущность
ProcessingInstruction Представляет инструкцию обработки

Иногда это может сбивать с толку, но объекты XML-документа могут быть (и часто бывают) полиморфными. Так, узел (Node) в то же самое время является элементом (Element). Это вносит путаницу, когда вы решаете, какой объект DOM требуется для совершения некоторого действия. Вы создаёте узлы, используя объект документа (Document), но если вам требуется добавить атрибуты к только что созданному узлу, вам придётся поработать с ним как с одним из элементов. Если в отношениях между объектами и действиями над ними и существует какая-то закономерность, мне пока не удалось открыть её в процессе каждодневной работы. Я постоянно обращаюсь к документации в MSDN, чтобы посмотреть, какой интерфейс предоставляет методы, нужные мне для решения той или иной задачи. Методы различных объектов логически сгруппированы, и, по-видимому, именно этот принцип (группировка логически связанных операций) был использован при проектировании DOM.

Таким образом, весь фокус состоит в том, чтобы получить у парсера MSXML нужный DOM-объект, реализацию которого предоставляет объект COM. Обычная последовательность действий подразумевает создание COM-объекта самого MSXML, у которого затем можно запросить (или получить каким-то другим способом) указатели на другие объекты XML DOM (которые в свою очередь тоже являются COM-объектами).

Демонстрационное приложение, использующее XML DOM

Создать навороченное приложение, использующее множество различных возможностей MSXML, совсем не сложно, но лишний код может только добавить путаницы. Поэтому я решил написать простое консольное приложение, которое выполняет четыре основных операции:

• Загружает XML-файл с диска.

• Отыскивает определённый узел и добавляет к нему дочерний узел.

• Находит ещё один узел и отображает содержащийся в нём текст.

• Сохраняет изменённый документ на диск.

Чтобы ещё больше упростить задачу, я жёстко "зашил" в программу имена XML-файлов и узлов. Понятно, что в реальном приложении вы вряд ли примените эту тактику. Но в нашем случае она имеет смысл, так как ещё больше упрощает код, связанный с использованием MSXML.

Как и во многих других случаях, я использовал в своём примере библиотеку ATL как удобную обёртку для всех операций, связанных с COM. Поэтому вы непременно увидете, как я использую объекты CComPtr и CComQIPtr. Для ровного счёта я добавил к ним также объекты CComBSTR и CComVariant. Если они вам не знакомы, просто запомните, что они являются шаблонами и сами заботятся о многих деталях, которые для наших целей несущественны. Для нас важно рассмотреть, каким образом искать узлы XML, добавлять новые узлы и отображать содержащийся в них текст.

Моё консольное приложение будет загружать XML-документ под названием xmldata.xml (предполагается, что он лежит в одном каталоге с исполняемым файлом), содержащий следующие данные:

<?xml version="1.0"?>

<xmldata>

 <xmlnode />

 <xmltext>Hello, World!</xmltext>

</xmldata>

Сначала мы будем искать узел xmlnode, и если найдём, добавим к нему новый узел (с атрибутом) в качестве дочернего. В результате получится документ следующего вида:

Поделиться с друзьями: