Работа с XML в.NET-приложениях. Знакомство с современными средствами работы с XML

Скачать Viber 22.05.2019
Скачать Viber

XML для PHP-разработчиков

Часть 1. Работа с XML в PHP за 15 минут

PHP5 значительно упрощает работу с XML в PHP

Серия контента:

Значение XML в современной среде разработки приложений трудно переоценить. Тем, кто никогда не работал с XML в РНР или еще не перешел на РНР5, это краткое руководство поможет освоить новую функциональность РНР5, связанную с XML, и оценить, насколько простой может быть работа с XML. Эта первая из трех статей посвящена знакомству с API и демонстрирует, что SimpleXML в сочетании с DOM служит идеальным инструментом для разработчиков, имеющих дело с простыми, предсказуемыми и относительно компактными XML-документами. Именно такими документами оперируют, например, Ajax-приложения при передаче информации о заполнении формы, в такие же документы оформляются ответы API Web-сервисов, таких как weather.com.

Основы XML

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

Сведения об XML

Язык Extensible Markup Language (XML) можно назвать и языком разметки, и форматом хранения текстовых данных. Это подмножество языка Standard Generalized Markup Language (SGML); он предоставляет текстовые средства для описания древовидных структур и их применения к информации. XML служит основой для целого ряда языков и форматов, таких как Really Simple Syndication (RSS), Mozilla XML User Interface Language (XUL), Macromedia Maximum eXperience Markup Language (MXML), Microsoft eXtensible Application Markup Language (XAML) и open source-язык Java XML UI Markup Language (XAMJ).

Структура XML

Базовым блоком данных в XML является элемент. Элементы выделяются начальным тегом, таким как , и конечным тегом, таким как . Каждому начальному тегу должен соответствовать конечный тег. Если для какого-то начального тега отсутствует конечный тег, XML-документ оформлен неправильно, и синтаксический анализатор (парсер) не сможет проанализировать его надлежащим образом. Названия тегов обычно отражают тип элемента. Можно ожидать, что элемент book содержит название книги, например, «Большой американский роман» (см. листинг 1). Текст, содержащийся между тегами, включая пробелы, называется символьными данными.

Листинг 1. Пример XML-документа
Большой американский роман Клифф отличный парень Миловидная Женщина редкая красавица Преданный Пес любит поспать Клифф встречает Миловидную Женщину. Преданный Пес спит, но просыпается, чтобы облаять почтальона. 4 9

Имена XML-элементов и атрибутов могут состоять из латинских букв верхнего (A-Z) и нижнего (a-z) регистров, цифр (0-9), некоторых специальных и неанглийских символов, а также трех знаков пунктуации: дефиса, знака подчеркивания и точки. Другие символы в именах не допускаются.

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

Каждый документ XML содержит один и только один корневой элемент. Корневой элемент — это единственный элемент XML-документа, для которого нет родительского элемента. В приведенном выше примере корневым является элемент . Большинство XML-документов содержат родительские и дочерние элементы. Элемент имеет один дочерний элемент . У элемента четыре дочерних элемента: , <characters>, <plot>И <success>. У элемента <characters> три дочерних элемента, каждый из которых является элементом <character>. У каждого элемента <character> по два дочерних элемента, <name> и <desc>.</p><p>Кроме вложенных элементов, что создает отношения родительский-дочерний, XML-элементы могут иметь атрибуты. Это пары имя-значение, присоединенные к начальному тегу элемента. Имена отделяются от значений знаком равенства, =. Значения заключаются в одинарные или двойные кавычки. В листинге 1 элемент <success> имеет два атрибута: "bestseller" и "bookclubs". XML-разработчики практикуют разные подходы к использованию атрибутов. Большую часть информации, содержащейся в атрибуте, можно поместить в дочерний элемент. Некоторые разработчики настаивают на том, чтобы информация атрибутов состояла не из данных, а из метаданных, то есть сведений о данных. Сами данные должны содержаться в элементах. На самом деле решение о том, использовать ли атрибуты, зависит от природы данных и от того, как они извлекаются из XML.</p><h3>Достоинства XML</h3><p>Одно из достоинств XML состоит в его относительной простоте. XML-документ можно составить в простом текстовом редакторе или текстовом процессоре, не прибегая к специальным инструментам или ПО. Базовый синтаксис XML состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержание. Обычно элемент начинается открывающим тегом <тег> и заканчивается соответствующим закрывающим тегом </тег >. XML чувствителен к регистру и не игнорирует пробелы и табуляции. Он очень похож на HTML, но, в отличие от HTML, позволяет присваивать тегам имена для лучшего описания свох данных. К числу преимуществ XML относится самодокументирование, читабельный для людей и компьютеров формат, поддержка Unicode, что позволяет создавать документы на разных языках, и простые требования к синтаксису и синтаксическому анализу. К сожалению, в РНР5 поддержка UTF-8 сопряжена с проблемами; это один из тех недостатков, которые привели к разработке РНР6.</p><h3>Недостатки XML</h3><p>XML многословен и избыточен, что порождает документы большого объема, занимающие много дискового пространства и сетевых ресурсов. Предполагается, что он должен быть читабелен для людей, но трудно представить себе человека, пытающегося прочесть файл XML с 7 млн. узлов. Простейшие синтаксические анализаторы функционально не способны поддерживать широкий набор типов данных; по этой причине редкие или необычные данные, каких бывает много, становятся серьезным источником затруднений.</p><h3>Правильно построенный XML</h3><p>XML-документ считается построенным правильно, если в нем соблюдены правила XML-синтаксиса. Неправильно построенный формат в техническом смысле не является XML-документом. Например, такой HTML-тег, как <br>, в XML неприемлем; соответствующий правильный тег выглядит как <br />. Корневой элемент можно представить себе как бесконечный шкаф с документами. У вас всего один шкаф, но почти нет ограничений на тип и количество его содержимого. В вашем шкафу помещается бесконечное количество ящиков и папок для документов.</p><h2>Основы PHP</h2><p>Большинство читателей этой статьи уже работают с РНР, но, возможно, незнакомы с его историей и эволюцией.</p><h3>О PHP</h3><p>Hypertext Preprocessor (PHP) — это не зависящий от платформы язык сценариев, используемый для создания динамических Web-страниц и серверных приложений. Он начинался как Personal Home Page/Form Interpreter (PHP/FI) и обрел новую жизнь в руках Сураски (Suraski) и Гутманса (Gutmans), которые в июне 1998 года выпустили РНР3. Их компания Zend Technologies до сих пор управляет разработкой PHP.</p><p>В июле 2004 года вышел PHP5 с Zend Engine II и многими новыми функциями, такими как:</p><ul><li>Поддержка объектно-ориентированного программирования</li><li>Улучшенная поддержка MySQL</li><li>Улучшенная поддержка XML</li> </ul><h3>PHP5 и XML</h3><p>Поддержка XML присутствовала в РНР с самых ранних версий, но в РНР5 она существенно улучшена. Поддержка XML в РНР4 была ограниченной, в частности, предлагался только включенный по умолчанию парсер на базе SAX, а поддержка DOM не соответствовала стандарту W3C. В РНР5 разработчики PHP XML, можно сказать, изобрели колесо, обеспечив соответствие общепринятым стандартам.</p><h3>Новое в поддержке XML в версии PHP5</h3><p>PHP5 содержит полностью переписанные и новые расширения, включая парсер SAX, DOM, SimpleXML, XMLReader, XMLWriter и процессор XSLT. Теперь все эти расширения основаны на libxml2.</p><p>Наряду с улучшенной по сравнению с PHP4 поддержкой SAX, в РНР5 реализована поддержка DOM в соответствии со стандартом W3C, а также расширение SimpleXML. По умолчанию включены и SAX, и DOM, и SimpleXML. Тем, кто знаком с DOM по другим языкам, станет проще реализовать аналогичную функциональность в РНР</p><h2>Чтение, обработка и написание XML в PHP5</h2><p>SimpleXML, при необходимости в сочетании с DOM, - идеальный выбор для чтения, обработки и составления в РНР5 простых, предсказуемых и относительно компактных документов.</p><h3>Краткий обзор предпочтительных API</h3><p>Из множества API, присутствующих в РНР5, DOM - самый знакомый, а на SimpleXML проще всего программировать. В типичных ситуациях, таких как те, что мы здесь рассматриваем, они наиболее эффективны.</p><h3>Расширение DOM</h3><p>Document Object Model (DOM) - это принятый W3C стандартный набор объектов для документов HTML и XML, стандартная модель сочетания этих объектов и стандартный интерфейс для доступа к ним и манипуляций с ними. Многие поставщики поддерживают DOM в качестве интерфейса к своим специальным структурам данных и API, благодаря чему модель DOM знакома массе разработчиков. DOM легко освоить и применять, так как его структура в памяти напоминает исходный документ XML. Чтобы передать информацию приложению, DOM создает дерево объектов, которое в точности повторяет дерево элементов файла XML, так что каждый элемент XML служит узлом этого дерева. DOM - это парсер, основанный на древовидной структуре. Поскольку DOM строит дерево всего документа, он потребляет много ресурсов памяти и времени процессора. Поэтому анализ очень крупных документов посредством DOM непрактичен из-за проблем производительности. В контексте данной статьи расширение DOM используется главным образом из-за его способности импортировать формат SimpleXML и выводить XML в формате DOM, или, наоборот, для использования в качестве строковых данных или XML-файла.</p><h3>SimpleXML</h3><p>Расширение SimpleXML – это предпочтительный инструмент для синтаксического анализа XML. Для его работы требуется РНР5. Оно взаимодействует с DOM при составлении XML-файлов и имеет встроенную поддержку XPath. SimpleXML лучше всего работает с несложными данными типа записей, такими как XML, передаваемый в виде документа или строки из другой части того же приложения. Если XML-документ не слишком сложный, не слишком глубокий и не содержит смешанного контента, для SimpleXML кодировать проще, чем для DOM, как и предполагает название. К тому же он надежнее при работе с известной структурой документа.</p><h3>Простые примеры</h3><p>Ниже приведены простые примеры работы с DOM и SimpleXML на компактных XML-файлах.</p><h2>DOM в действии</h2><p>Модель DOM, реализованная в PHP5, - это та же спецификация W3C DOM, с которой вы имеете дело в браузере и с которой работаете посредством JavaScript. Используются те же методы, так что способы кодирования покажутся вам знакомыми. Листинг 2 иллюстрирует использование DOM для создания XML-строки и XML-документа, отформатированных в целях читабельности.</p><h5>Листинг 2. Применение DOM</h5><span> <?php //Создает XML-строку и XML-документ при помощи DOM $dom = new DomDocument("1.0"); //добавление корня - <books> $books = $dom->appendChild($dom->createElement("books")); //добавление элемента <book> в <books> $book = $books->appendChild($dom->createElement("book")); // добавление элемента <title> в <book> $title = $book->appendChild($dom->createElement("title")); // добавление элемента текстового узла <title> в <title> $title->appendChild($dom->createTextNode("Great American Novel")); //генерация xml $dom->formatOutput = true; // установка атрибута formatOutput // domDocument в значение true // save XML as string or file $test1 = $dom->saveXML(); // передача строки в test1 $dom->save("test1.xml"); // сохранение файла?> </span><p>Это приводит к созданию выходного файла, приведенного в листинге 3.</p><h5>Листинг 3. Выходной файл</h5><span> <?xml version="1.0"?> <books> <book> <title>Great American Novel

Листинг 4 импортирует объект SimpleXMLElement в объект DOMElement , иллюстрируя взаимодействие DOM и SimpleXML.

Листинг 4. Взаимодействие, часть 1 - DOM импортирует SimpleXML
". "Great American Novel"); if ($sxe === false) { echo "Error while parsing the document"; exit; } $dom_sxe = dom_import_simplexml($sxe); if (!$dom_sxe) { echo "Error while converting XML"; exit; } $dom = new DOMDocument("1.0"); $dom_sxe = $dom->importNode($dom_sxe, true); $dom_sxe = $dom->appendChild($dom_sxe); echo $dom->save("test2.xml"); ?>

Функция из листинга 5 берет узел документа DOM и превращает его в узел SimpleXML. Затем этот новый объект можно использовать в качестве «родного» элемента SimpleXML. В случае любой ошибки возвращается значение FALSE.

Листинг 5. Взаимодействие, часть 2 - SimpleXML импортирует DOM
loadXML("Great American Novel"); if (!$dom) { echo "Error while parsing the document"; exit; } $s = simplexml_import_dom($dom); echo $s->book->title; // Great American Novel ?>

SimpleXML в действии

Расширение SimpleXML – это предпочтительный инструмент для синтаксического анализа XML. Оно взаимодействует с DOM при составлении XML-файлов и имеет встроенную поддержку XPath. Для SimpleXML проще писать код, чем для DOM, как и предполагает его название.

Для тех, кто не знаком с РНР, листинг 6 форматирует тестовый XML-файл как include-файл в целях читабельности.

Листинг 6. В следующих примерах тестовый XML-файл отформатирован как include-файл РНР с именем example.php.
Great American Novel Cliff really great guy Lovely Woman matchless beauty Loyal Dog sleepy 4 9 XML; ?>

В гипотетическом Ajax-приложении может, например, понадобиться извлечь из XML-документа почтовый индекс и обратиться к базе данных. В листинге 7 из XML-файла предыдущего примера извлекается элемент

Листинг 7. Извлечение узла – как легко его получить?
book->plot; // "Cliff meets Lovely Woman. ..." ?>

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

Листинг 8. Извлечение нескольких экземпляров элемента
node, echo a separate . */ foreach ($xml->book as $book) { echo $book->plot, "
"; } ?>

Кроме чтения имен элементов и их значений, SimpleXML может также обращаться к атрибутам элемента. В листинге 9 производится обращение к атрибутам элемента; это делается точно так же, как обращение к элементам массива.

Листинг 9. Демонстрация обращения SimpleXML к атрибутам элемента
Great American Novel Cliff really great guy Lovely Woman matchless beauty Loyal Dog sleepy Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark at mailman. 4 9 XML; ?> nodes of the first book. * Output the success indications, too. */ foreach ($xml->book->success as $success) { switch((string) $success["type"]) { // Get attributes as element indices case "bestseller": echo $success, " months on bestseller list"; break; case "bookclubs": echo $success, " bookclub listings"; break; } } ?>

Чтобы сравнить элемент или атрибут со строкой или передать его функции, которой требуется строка, нужно преобразовать его в строку при помощи оператора (string). Иначе, по умолчанию, РНР рассматривает элемент как объект (листинг 10).

Листинг 10. Преобразуй в строку, или проиграешь
book->title == "Great American Novel") { print "My favorite book."; } htmlentities((string) $xml->book->title); ?>

Данные в SimpleXML не обязаны быть неизменными. Листинг 11 выводит новый XML-документ, точную копию исходного, за исключением того, что в новом имя Cliff изменено на Big Cliff.

Листинг 11. Изменение текстового узла с помощью SimpleXML
Great American Novel Cliff really great guy Lovely Woman matchless beauty Loyal Dog sleepy Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark at mailman. 4 9 XML; ?> book->characters->character->name = "Big Cliff"; echo $xml->asXML(); ?>

Начиная с версии PHP 5.1.3 SimpleXML дополнен возможностью легко добавлять дочерние элементы и атрибуты. Листинг 12 выводит XML-документ, основанный на исходном, но с добавленным новым персонажем и описанием.

Листинг 12. Добавление дочерних и текстовых узлов с помощью SimpleXML
Great American Novel Cliff really great guy Lovely Woman matchless beauty Loyal Dog sleepy Yellow Cat aloof Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark at mailman. 4 9 XML; ?> book->characters->addChild("character"); $character->addChild("name", "Yellow Cat"); $character->addChild("desc", "aloof"); $success = $xml->book->addChild("success", "2"); $success->addAttribute("type", "reprints"); echo $xml->asXML(); ?>

Заключение

Эта первая статья серии из трех частей посвящена знакомству с API и демонстрирует, что SimpleXML, при необходимости в сочетании с DOM, служит идеальным инструментом для разработчиков, имеющих дело с простыми, предсказуемыми и относительно компактными XML-документами. Версия PHP5 значительно расширила возможности программистов в части работы с XML в РНР. Во второй части мы рассмотрим более сложные методы синтаксического анализа XML.

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

Конечно, фантастика, но для структуризации в программировании был придуман специальный язык (xml ). А для редактирования данных, представленных в этом формате, созданы специализированные xml редакторы:

Что такое XML

Многие знают, что основой любого веб-ресурса является HTML . С помощью языка гипертекста можно очень легко и удобно задавать иерархию всех элементов на веб-странице. Частично он позволяет решать проблему и стилевого оформления. Вся эта иерархия создается (структурируется ) с помощью встроенных тегов и их атрибутов, набор которых хоть и не малый, но все же ограниченный.

Поэтому HTML позволяет решать лишь одну единственную задачу структуризации в интернете: расстановки и создания элементов веб-страницы для ее последующей разметки (создания дизайна ). А как же структурировать остальные данные, передаваемые в бесчисленном количестве между ресурсами во всемирной паутине? Как без ограничений организовать их выборку, поиск и фильтрацию?

Все эти «недочеты » могут быть исправлены с помощью XML . Перед началом обзора редакторов xml давайте более подробно разберемся, что это за язык и какова область его применения в виртуальном пространстве:


Аббревиатура XML в переводе с английского означает «расширяемый язык разметки » (Xtensible Markup Language ). Он стандартизирован и рекомендован к использованию W3C . А это значит, что его применение является наиболее оптимальным и «беспроблемным » способом создания веб-документа.

Кроме описания документов XML также частично влияет на работу специальных системных программ. Препроцессоры этого языка предназначены для перевода данных с машинного кода в понятный для пользователя вид. Такие препроцессоры лежат в основе всех редакторов xml файлов.

Язык расширяемой разметки обладает следующими положительными сторонами:

  • Является идеальным средством для описания структуры и разметки любого веб-документа;
  • В XML нет ограниченного набора элементов, с помощью которых осуществляется структуризация. Вместо этого пользователь сам задает иерархию и имена всех элементов, опираясь лишь на правила описания языка;
  • XML обладает простым, понятным, а главное расширяемым синтаксисом;
  • Язык построен на основе основных кодировок Юникода;
  • Широко применяется не только для описания обычных веб-страниц, но и легко подключается к коду большинства языков программирования. В том числе и тех, которые используются в веб-программировании (PHP, ASP. NET и другие ).

Синтаксис XML

Каждый документ, написанный на XML , состоит из сущностей. Сущность – это самая маленькая единица (элемент ). Каждая из сущностей содержит в себе символы.

Они делятся на:

  • Символы разметки — теги, комментарии (< тег>, );
  • Буквенные символы – из них состоит основное содержимое, заключенное между тегами.

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

Hello, world!

Кроме корневого элемента XML документ состоит из пролога. Он расположен в самом начале кода. В состав пролога могут входить:

  • Объявления;
  • Инструкции обработки;
  • Комментарии.

Более наглядно основные составляющие XML показаны на следующем скриншоте документа, созданного в простом xml редакторе:


Более подробно с синтаксисом языка можно ознакомиться с помощью технической документации к XML .

Обзор редакторов для XML

  • Microsoft Visual Studio – представляет собой мощную среду разработки, объединившую в себя большое количество инструментов и средств для написания программного кода. В ее состав также входит «навороченный» редактор XML . Кроме всего прочего он поддерживает создание и визуализацию XML схем. К сожалению, в Visual Studio поддержка PHP реализована слабо. Эта среда больше «заточена » под создание веб-приложений с помощью ASP.NET :


  • Adobe Dreamweaver – еще одна мощная среда разработки. Весь ее инструментарий полностью направлен на создание сайтов. Поддерживается синтаксис нескольких языков программирования. В состав Dreamweaver также входит встроенный редактор xml таблиц:


  • XMLSpy XML Editor – мощное средство для работы с различными форматами данных XML. Поддерживается не только простое редактирование данных, схем, подсветка синтаксиса, но и графическая визуализация иерархических связей между элементами:


Визуальный xml редактор доступен в двух редакциях стоимостью 399 и 799 евро. Самый дорогой вариант включает в себя поддержку синтаксиса нескольких языков программирования и отладчик. Более дешевый вариант полностью совместим с наиболее популярными средами разработки (Visual Studio, Eclipse ), и может выступать в качестве их полноценной надстройки:


  • XML Notepad — бесплатный редактор xml . Имеет встроенную подсветку синтаксиса, средство валидации. А также поддержку построения схем. Приложение отличается простым и понятным интерфейсом:


Обзор онлайн-сервисов

  • XML Schema Generator – сервис позволяет из обычного документа XML создать схему (XSD ). Интерфейс сервиса отличается простотой и выполнен в черно-белых тонах. Кроме этого радует полное отсутствие рекламы;
  • xmlvalidation.com – данный ресурс позволяет произвести полную валидацию содержимого XML документа, скопированного в специальное поле или загруженного в виде файла:


  • XSL Transformation – служит для преобразования обычного XML кода с помощью указанных шаблонов стилей XSLT . Также в состав сервиса входит еще несколько десятков полезных для веб-мастера инструментов, в том числе и онлайн-валидатор XML .

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

И XPointer. Широкое распространение XML вызывает необходимость знать инструментальные средства работы с данной технологией и их функциональные возможности. К XML-обработке относятся форматирование, синтаксический анализ, редактирование, проверка корректности и преобразование в другие форматы. Подавляющее большинство средств работы с XML, присутствующих на рынке, предоставляют множество функциональных возможностей. В данной статье исследуются различные категории инструментальных средств для работы с XML и приводятся соответствующие примеры инструментов от различных производителей программного обеспечения.

При выборе инструментальных средств для работы с XML-технологиями сначала необходимо определить требования. Например, если предполагается выполнять с XML различные задачи (редактирование, проверка корректности и т.д.), рассмотрите возможность использования XML IDE с соответствующими функциями. Для решения конкретной задачи (сравнение XML-файлов или создание карты сайта) рассмотрите возможность использования более специализированного средства для конкретной задачи.

В данной статье рассматриваются следующие категории инструментальных средств для работы с XML:

  • Программы для разработки и проверки XML-карт сайтов.
  • Генераторы RSS-фидов.
  • Генераторы XML-схем.
  • Программы для проверки корректности XML.
  • Программы форматирования XML.
  • Редакторы XML.
  • Инструментальные средства для работы с XML.
  • Инструментальные средства с открытыми исходными кодами для работы с XML.
  • Интегрированные среды разработки XML.
  • Средства сравнения XML
  • Инструментальные средства для работы с XQuery.
  • Инструментальные средства для работы с XPath.

Программа для создания XML-карт сайтов

XML-карта сайта представляет собой список всех URL-адресов Web-сайта. Карта сайта информирует поисковую систему об URL-адресах Web-сайта, доступных для сканирования и включения в базу данных поисковой системы. Большинство программ для создания карт сайтов основаны на Web-технологиях и запрашивают URL-адрес Web-сайта вместе с несколькими параметрами, такими как частота изменений и дата последнего изменения.

Существует несколько генераторов карт сайтов:

  • Google SiteMap Generator автоматически генерирует карту сайта, основываясь на обновлениях и трафике вашего Web-сайта, развернутого на Web-сервере.
  • Gsite Crawler - это Windows-приложение для создания карт сайтов.

Кроме загружаемых инструментальных программ, карты сайтов можно генерировать с помощью различных интерактивных приложений; вот два примера:

  • Sitemaps Builder создает карты сайтов для Google, HTML и текстовых URL.
  • XML Sitemaps создает карты сайтов в форматах XML, ROR, Text или HTML.

Программы проверки корректности XML-карт сайтов

Программы проверки корректности карт сайтов используются для проверки карт, сгенерированных для Web-сайтов. Такая программа проверяет, подходит ли карта сайта для использования поисковой системой.

Ниже приведен список программ проверки корректности карт сайтов:

  • Automapit sitemap validator проверяет корректность карты сайта, гарантируя ее соответствие критериям поисковых систем.
  • Sitemap XML validator проверяет карту сайта на корректность XML-кода, чтобы вы смогли исправить ошибки до ее отправки в поисковые системы.
  • XML sitemaps validator идентифицирует все проблемы карты для их устранения перед отправкой карты в поисковые системы.
  • Online Merchant sitemap checker проверяет корректность XML-заголовков в файле sitemap.xml.

Генераторы RSS-фидов

Новостные фиды RSS - это отличный способ держать посетителей вашего сайта в курсе последних изменений его содержимого. Генераторы RSS-фидов популярны, например, среди пользователей, которые хотят просматривать заголовки новостных сайтов (например, CNN) или знать о последних спортивных новостях.

Разработчики Web-сайтов могут генерировать RSS-фиды при помощи следующих инструментальных средств:

  • IceRocket RSS builder - программа с простым интерфейсом, позволяющая добавлять темы, ссылки и содержимое с целью создания RSS-фидов для вашего Web-сайта.
  • Feedity создает RSS-фиды для Web-страниц, новостей или товаров.
  • RSSPect настраивает RSS-фиды для Web-сайтов, документов или подкастов.

Генераторы XML-схем

XML-схемы можно генерировать из экземпляра XML.

Доступные инструментальные средства:

  • - программа, запускаемая из командной строки, генерирует XML Schema Definition (XSD) из XML.
  • XMLBeans - программа из проекта Apache, предоставляющая несколько функций, в том числе генерирование схемы при помощи inst2xsd (Instance to Schema Tool).
  • XML for ASP BuildXMLSchema - интерактивный генератор XML-схем.

Программы для проверки корректности XML

Экземпляры XML-кода можно проверять на соответствие их схемам.

Используйте одно из следующих интерактивных инструментальных средств:

  • XMLValidation.com проверяет соответствие XML-документа XML-схеме или DTD, указанным в документе, либо, при отсутствии объявления схемы или DTD, проверяет синтаксис.
  • DecisionSoft.com Schema Validator проверяет корректность одной схемы и экземпляра документа и выводит список ошибок.
  • W3C XML validator - сервис проверки схем с URI пространства имен http://www.w3.org/2001/XMLSchema.

Программы форматирования XML

Форматирование XML - это операция, часто выполняемая с XML-данными для облегчения их чтение. Большинство настольных приложений, работающих с XML, предоставляют эту функциональность. Для выполнения быстрого форматирования XML-содержимого без установки каких-либо инструментальных средств попробуйте один из следующих интерактивных сервисов.

Редакторы XML

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

  • Xerlin XML Editor - Java™-программа, которая создает и проверяет XML-содержимое. Редактор имеет открытый исходный код, поддерживает XSLT и может проверять XML на соответствие DTD и схемам.
  • - еще один XML-редактор с открытыми исходными кодами на языке Java. Поддерживает экспорт содержимого в формат PDF и предварительный просмотр HTML с использованием XSLT; работает на нескольких платформах.
  • XMLFox - бесплатный XML-редактор с программой проверки корректности, позволяющий создавать грамматически правильные XML-документы и схемы. Этот редактор поддерживает и другие операции с XML.

Инструментальные средства для работы с XML

XSLT-преобразования полезны при преобразовании одной формы XML в другую с использованием таблиц стилей. В этом могут помочь многочисленные инструментальные средства; в качестве примеров можно привести Tiger XSLT Mapper и Kernow.

  • Tiger XSLT Mapper - программа для преобразования XML-структур, которую могут легко использовать новички. Она автоматически создает преобразования, которые можно редактировать, используя графический интерфейс, построенный по принципу перетаскивания.
  • - это Java-интерфейс, выполняющий преобразования программным способом. Kernow - это хороший выбор для разработчиков, которым нужно периодически выполнять XSLT-преобразования при помощи визуального интерфейса.

Также полезны несколько интерактивных XSLT-программ:

Разработчики, предпочитающие подключаемые к браузеру плагины, могут использовать следующие полезные плагины для работы с XML:

  • XSL Results Add-on отображает результаты XSLT-преобразования (XSLT 1.0 или XSLT 2.0 through Saxon-B) документа.
  • XML Developer Toolbar добавляет в панель инструментов стандартные инструменты для работы с XML.
  • XML Tree отображает XML-данные в удобном для пользователя виде.
  • XML Viewer - инструмент просмотра XML-документов для Google Chrome.

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

Пользователям, которые не могут купить коммерческие программы для работы с XML, будут полезны инструментальные средства с открытыми исходными кодами. Активная работа сообщества позволила создать очень хорошие программы для работы с XML.

Предоставляет ряд функциональных возможностей для обработки XML-документов:

  • Проверка на соответствие DTD.
  • Автоматическое завершение кода с использованием DTD.
  • Пользовательские шаблоны.
  • Обработка XSLT.
  • Редактирование по частям.

Это XML-редактор, работающий в Eclipse. Среди его возможностей:

  • Поддержка пространства имен.
  • Автоматическое завершение тегов и атрибутов.
  • Проверка корректности XML.

Эти инструментальные средства предоставляют также возможности для работы с Java-элементами:

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

Это Java-программа с открытыми исходными кодами, обладающая следующими функциональными возможностями:

  • Форматирование и завершение кода.
  • XSL-преобразования.
  • Генерирование DTD и схемы.
  • Проверка корректности XML.

Интегрированные среды разработки XML

Интегрированные среды разработки (IDE) для работы с XML выполняют практически все операции, связанные с XML. Имеется ряд IDE с различными функциональными возможностями.

XMLSpy - это XML IDE для создания, редактирования и отладки XML, XML-схем, XSL/XSLT, XQuery, WSDL и SOAP. Дополнительные возможности:

  • Генератор кода.
  • Преобразователь файлов.
  • Отладчик.
  • Профайлер.
  • Поддержка интеграции в Visual Studio.NET и Eclipse IDE.
  • Мастер импорта из базы данных, позволяющий импортировать данные из Microsoft® Access®.

XML Marker - это XML-редактор, использующий синхронизированные табличное дерево (table-tree) и текстовый дисплей для отображения XML-данных в табличном и иерархическом виде. Эта программа может загружать очень большие документы (размером в сотни мегабайт и даже несколько гигабайт). Другие функциональные возможности:

  • Редактор с подсветкой синтаксиса.
  • Сортировка таблиц.
  • Автоматический отступ.
  • Проверка синтаксиса при вводе.

Liquid XML Studio - пакет из нескольких программ для работы с XML. Предоставляет следующие инструментальные средства:

  • Редактор XML-схемы.
  • Генератор кода связывания XML-данных.
  • Редактор WSDL.
  • Редактор XML.
  • Интеграция с Microsoft Visual Studio.
  • Тестовый клиент Web-сервисов.
  • Компоновщик XPath-выражений.
  • Генератор HTML-документации.
  • Редактор и отладчик XSLT.
  • Редактор больших файлов.
  • XML Diff - сравнение XML-файлов.

На рисунке 1 показан редактор Liquid XML с набором панелей для работы с XML-содержимым.

< oXygen /> XML Editor - это полнофункциональная интегрированная среда разработки XML с поддержкой разнообразных операций, связанных с XML. Ее возможности будут полезны опытным пользователям. Перечислим некоторые из них:

  • Интеллектуальный редактор XML.
  • Проверка корректности XML.
  • Поддержка XSL/XSLT.
  • Поддержка XQuery.
  • Поддержка XPath.
  • XML-публикация из одного источника.
  • Поддержка документов Microsoft Office.

На рисунке 2 показан редактор < oXygen /> XML Editor с исходным кодом и древовидным представлением XML-документа. (Увеличенная версия рисунка 2.)

Stylus Studio предлагает следующие функциональные возможности:

  • Профайлеры XSLT и XQuery.
  • Поддержка EDI.
  • Инструментальные средства работы с корпоративными Web-сервисами.
  • XML-конвейер.
  • Взаимодействие XML-схемы с XSLT 2.0 и XQuery 1.0.
  • Средства публикации XML.

XML Notepad от Microsoft помогает разработчикам создавать XML-документы. Эта бесплатная программа содержит инструмент XMLDiff, который можно использовать для сравнения двух XML-файлов. Ее интерфейс прост и удобен в использовании. Программа работает на платформе.Net. Вот некоторые ее возможности:

  • Древовидное представление, синхронизированное с текстовым.
  • Поддержка пространства имен при копировании и перемещении текста.
  • Инкрементный поиск в древовидном и текстовом представлениях.
  • Поддержка перетаскивания при редактировании.
  • Неограниченное количество операций отмены изменений и повтора изменений при редактировании.
  • Поддержка поиска с использованием регулярных выражений и XPath.
  • Мгновенная проверка на соответствие XML-схеме.
  • Технология Intellisense (автодополнение), основанная на ожидаемых элементах, атрибутах и значениях перечисляемых простых типов.
  • Поддержка специализированных редакторов для типов данных date, dateTime, time и других типов, например, color.
  • Встроенный просмотрщик HTML.
  • Поддержка XInclude.

На рисунке 3 показан редактор XML Notepad с древовидным представлением XML-файла и панелью ошибок. (Увеличенная версия рисунка 3.)

Это быстрый XML-редактор с поддержкой проверки корректности. Наличие вкладок позволяет редактировать несколько файлов одновременно. Другие функциональные возможности:

  • Проверка на соответствие DTD/XML Schema/RELAX NG.
  • Поддержка XSLT и XPath.
  • Форматированный вывод на печать и цветовая подсветка синтаксиса.
  • Свертывание и завершение тегов.
  • Импорт и экспорт документов Microsoft Word без потери информации.
  • Поддержка XHTML, XSL, DocBook и Text Encoding Initiative (TEI).

XRay XML Editor - бесплатная интегрированная XML IDE. Эта программа проверяет корректность XML-документа при вводе. Имеет встроенную поддержку стандартов W3C. Также имеет HTML-просмотрщик для предварительного просмотра Web-страниц, созданных с помощью XML. Можно создавать три типа схем, включая XSD, DTD и External Data Representation (XDR). Среди других функциональных возможностей:

  • XSLT-обработка в режиме реального времени.
  • Проверка корректности схемы в режиме реального времени.
  • Интегрированное интерактивное учебное руководство по XML.

XMLSpear - бесплатный XML-редактор, написанный на языке Java и доступный для многих платформ. Обладает расширенными функциональными возможностями, такими как интерактивная проверка на соответствие схеме, расширенная панель XPath и др. XML отображается в трех различных форматах, включая древовидную таблицу, просмотр элементов и просмотр исходного кода. XMLSpear доступен в виде Web-программы на Java или в виде автономного приложения. Дополнительные функциональные возможности:

  • Поддержка XPath и XSLT.
  • Способность генерировать завершенные XML-документы из схемы.
  • Поддержка нескольких форматов кодирования.
  • Интегрированный текстовый и HTML-плагин.
  • Проверка на соответствие схеме или DTD в режиме реального времени.
  • Генерирование схемы из экземпляров XML.
  • Древовидный редактор для работы с узлами.

XMLmind - многофункциональный XML-редактор, использующий технологию Java и доступный для нескольких платформ. Более подходит опытным пользователям, а не новичкам. Представляет инновационный способ редактирования XML-документов и требует наличия Java-платформы. Среди функциональных возможностей XMLmind:

  • Преобразование XML-документов в HTML, PDF, Eclipse и многие другие форматы.
  • Наличие DITA-преобразователя.
  • Поддержка DocBook, JavaDoc, XHTML и встроенных шаблонов для них.
  • Поддержка создания MathML-документов.
  • Редактируемые команды.
  • Интегрированный анализатор XML и механизм XSLT.

ElfData XML Editor - программа для пользователей Mac OS. Эта среда XML IDE имеет поддержку Unicode и может выполнять проверку XML-документов на грамматическую правильность с DTD и без него. Доступны два режима представления: в виде дерева и в виде кода. Поддержка технологии drag-and-drop позволяет перетаскивать на документ XML-элементы. Поиск облегчается благодаря наличию двух режимов: поиск по коду и поиск по дереву. Среди других функциональных возможностей:

  • Совместимость с XML 1.0.
  • Интерфейс пользователя в стиле Macintosh.
  • Подробные сообщения об ошибках с предоставлением помощи в их отладке.
  • Функция "Send to Browser" (отправка в браузер), позволяющая просматривать документ в браузере.
  • Возможность сохранять страницы в виде XHTML с DTD.

XMetaL похож на текстовый процессор. Аналогично большинству XML IDE, он может выполнять проверку корректности XML-документов и поддерживает схемы, DTD и XInclude. Другие функциональные возможности:

  • Проверка орфографии и автоматическое завершение кода.
  • Поддержка вывода в формате Web-справки.
  • Способность преобразовывать XML-документы в PDF, HTML и многие другие форматы.
  • Коннектор XMetal интегрируется с системами управления контентом (CMS) и системами управления версиями, например, SVN.
  • Поддержка Unicode позволяет создавать XML-документы на различных языках.
  • Поддержка DITA (с такими возможностями, как визуализация и ориентированный на темы пользовательский интерфейс) для создания DITA-содержимого.

Средства сравнения XML

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

< oXygen /> XML Diff & Merge может сравнивать файлы, каталоги и ZIP-архивы. После загрузки в программу исходного и целевого документов отображаются выделенные цветом различия; изменения в исходном и целевом файлах можно редактировать. Программа имеет много встроенных алгоритмов сравнения и способна автоматически выбирать алгоритмы на основе содержимого документа и его размера. Программа может выполнять пословное и посимвольное сравнение. При сравнении каталогов и архивов за основу сравнения можно выбрать следующие параметры:

  • Временная отметка.
  • Содержимое.
  • Двоичное сравнение.

Liquid XMLDiff имеет много специфичных для XML функций, например, удаление пробелов, комментариев и директив процессора. Эта программа достаточно функциональна, чтобы спрогнозировать, являются ли элементы новыми, удаленными или перемещенными. Программа доступна также в составе Liquid XML Studio в редакции для дизайнера и разработчика.

ExamXML - это мощное средство визуального сравнения и синхронизации различий между XML-документами. Входным XML для сравнения может быть либо файл, либо поле из базы данных. ExamXML может также сравнивать и сохранять части XML-документа; также можно выполнять импорт или экспорт из документов Microsoft Excel®. ExamXML работает на различных версиях Microsoft Windows®. Другие функциональные возможности:

  • Проверка корректности XML на соответствие DTD и XML-схеме.
  • Нормализация дат и чисел.
  • Поддержка drag-and-drop.
  • XML-документы отображаются в виде дерева.

DeltaXML позволяет искать, сравнивать, соединять и синхронизировать изменения в XML-документах. Поддерживает Java API, что облегчает программное сравнение XML-документов. Может работать с большими файлами. Программа может выдавать дельта-файл с результатами сравнения. Этот файл можно отобразить непосредственно либо использовать XSL; можно обработать этот файл в других XMKL-программах. Программа DeltaXML Sync может сравнивать три XML-документа и визуализировать различия. Кроме функции сравнения XML-документов, имеет несколько инструментов форматирования:

  • Сравнение DeltaXML DITA.
  • Сравнение DeltaXML DocBook.
  • Сравнение DeltaXML ODT.
  • Слияние DeltaXML ODT.

Инструментальные средства для работы с XQuery

Язык XQuery может быть очень полезен опытным пользователям XML для выполнения запросов и извлечения содержимого из больших XML-документов. Специализированные программы для работы с XQuery помогут воспользоваться преимуществами XQuery и позволят использовать такие высокоуровневые функции, как отображение, отладка и профилирование. Эти программы предоставляют полезные функции, такие как проверка корректности, автоматическое завершение кода и предварительный просмотр. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Редактор XMLSpy XQuery Editor предоставляет подсветку синтаксиса и контекстно-чувствительные меню для XQuery. Его функции автоматического завершения кода облегчают создание XQuery-документов. Он также позволяет разрабатывать XQuery для баз данных, поддерживающих XML. Другие функциональные возможности:

  • Изоляция ошибок.
  • Упрощенная отладка.
  • Улучшенная производительность кода.
  • Улучшенный просмотр текста.

Программа Stylus Studio XQuery Editor имеет интегрированный редактор XQuery с широким набором функциональных возможностей, включая интеллектуальную проверку кода, автоматическое завершение кода, конструкторы элементов, функции, path-выражения и многое другое. Редактор основан на открытой архитектуре XQuery с поддержкой процессора Saxon XQuery. Окно дерева исходного кода XQuery поддерживает технологию drag-and-drop, а также удобные символы и пиктограммы. Дополнительные функциональные возможности:

  • Создание сценариев XQuery.
  • Предварительный просмотр XQuery.
  • Отображение результатов XQuery в XQuery-выражения.

Средства разработки XQuery для Eclipse помогают создавать, отлаживать и выполнять XQuery в среде Eclipse. Эти средства предоставляют также:

  • Поддержку обновлений XQuery и расширений функций работы со сценариями.
  • Завершение кода и шаблоны кода.
  • Проверку семантики и быстрое исправление.
  • Проверку корректности при вводе.

Инструментальные средства для работы с XPath

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

Программа SketchPath - это XPath-редактор и средство анализа и тестирования XML. Она предоставляет IDE для разработки и тестирования XPath-выражений с XML-документами. Программа использует.NET Framework для работы с XPath 1.0 и Saxon.NET для XPath 2.0. Другие функциональные возможности:

  • Использование XPath-переменных в выражениях.
  • Помощник по функциям XPath.
  • Встроенный пошаговый трассировщик и отладчик.
  • Цветовая подсветка синтаксиса для выражений.

XPath Visualizer - это бесплатная программа Microsoft Windows, выполняющая XPath-запросы к XML-документам и визуализирующая результаты. Входной информацией может быть файл в файловой системе или URL-адрес; также можно скопировать содержимое файла непосредственно в программу в виде текста. В программе можно вводить полные XPath-запросы. Другие функциональные возможности:

  • Автоматическое обнаружение и отображение пространств имен XML.
  • Проверка корректности XPath-запросов.
  • Автоматическое добавление пространства имен XML по умолчанию в выражение запроса и возможность удалить пространство имен XML из любого документа.

Доступны также Web-программы для работы с XPath, например:

  • XPath Query Expression Tool (XMLME.com).
  • XSLT Tryit Editor (W3Schools.com).

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


Зачем нам работать с XML?

Если вы ещё не очень хорошо представляете себе, что такое XML, то рекомендую прочитать статью "XML - это всерьёз и надолго" в "КВ" № за 2007-й год. Чтобы сэкономить место для более важных вещей, здесь сам формат XML разбираться не будет.

Перед тем, как начинать знакомиться с программным кодом, нужно ответить на один принципиальный вопрос: зачем вообще включать поддержку XML в своё приложение? Думаю, что многие задавали себе этот вопрос относительно многих технологий, и не все после ответа были включены в приложения. Впрочем, с XML дело обстоит несколько иначе, и существуют реальные поводы использовать этот формат во многих ситуациях.

Главное преимущество XML в том, что, будучи по природе текстовым форматом, он, тем не менее, прекрасно позволяет хранить и передавать любые данные. Поскольку этот формат текстовый, то сама собой решается проблема его кросс-платформенности, и точно так же легко решается проблема передачи XML-данных (как это, например, сделано в SOAP). Кроме того, можно без проблем изменять формат передачи или хранения данных, добавляя новые атрибуты и не сильно беспокоясь о совместимости с предыдущими версиями формата, поскольку приложения, использующие старую версию, смогут прочитать то, что им надо, не обращая внимания на новые теги или атрибуты. Многие приложения используют основанные на XML файловые форматы, многие протоколы передачи данных тоже основаны на XML, и списки тех и других продолжают расти.

Конечно, с другой стороны, XML не очень экономичен, потому что, как когда-то верно заметил один из посетителей форума "Компьютерных вестей", часто XML-документы состоят на 10% из данных и на 90% из тегов. Впрочем, это уже в значительной степени зависит от того, какие вы сами выберете теги. Можно написать ул. Мельникайте, 2, а можно . Хотя, если честно, мне кажется, что с нынешними винчестерами и толстыми каналами нет смысла особенно ужиматься.

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

Для программирования мы будем использовать основной язык платформы.NET - C#. Для того, чтобы как можно больше читателей могли сами поупражняться с приведенным программным кодом, я буду использовать первую версию C# и.NET Framework"а.


Запись данных

Сначала поговорим о записи данных, поскольку, сами понимаете, чтобы что-то откуда-то считывать, нужно сначала что-то куда-то и записать. А коль скоро мы с вами занялись программированием, то создавать XML-данные "ручками" нам с вами не пристало. Поэтому давайте сначала займёмся записью данных в XML.

Для начала создайте новый проект в Visual Studio, #Develop"е или C# Builder"е, и в список импортируемых namespace"ов добавьте System.Xml.

За запись XML-данных в.NET Framework"е отвечает специальный класс XmlTextWriter, который позволяет записывать XML-данные в произвольный поток. То есть, мы, вообще говоря, можем записать их с его помощью и в файл, и в базу данных, и отправить кому-то через Интернет, однако сейчас мы будем писать всё именно в файл. Вы можете перенаправить вывод, изменив конструктор объекта (т.е. передав при инициализации не имя файла и его кодировку, а объект, являющийся потоком данных). Впрочем, я, кажется, уже стал забегать немного вперёд. Давайте сначала познакомимся с кодом, ответственным за запись данных в наш с вами XML-файл.

String FileName = "c:\\demo.xml"; XmlTextWriter xml = new XmlTextWriter(FileName, System.Text.Encoding.Unicode); xml.Formatting = Formatting.Indented; xml.WriteStartDocument(); xml.WriteStartElement("rootelement"); for (int i = 0; i < 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

Первая строка, думаю, вполне ясна - это просто запись имени файла, в который мы будем сохранять данные. Дальше мы создаём объект типа XmlTextWriter (он называется, как видите, xml), и именно с ним мы будем производить все дальнейшие операции. Заметьте, что при конструировании объекта мы указываем и кодировку, в которой будет записываться XML: в нашем примере это Unicode. Следующая строчка, вообще говоря, не обязательна, однако она сделает наш XML-документ, что называется, human readable, то есть добавит нужные отступы и разобьёт его на строки. Без этого весь документ был бы записан одной строкой, что, хотя и экономит место, но делает его практически непригодным для ручного редактирования.

Начинается запись документа с вызова метода WriteStartDocument() нашего объекта xml. Следующая за ней строчка добавляет корневой элемент "rootelement" в наш XML-документ (напомню, для XML-документов корневой элемент должен присутствовать в единственном экземпляре). Далее мы в цикле добавляем ещё десять не несущих никакой смысловой нагрузки элементов в наш с вами XML-документ, для каждого из которых устанавливаем два атрибута и ещё по десять подэлементов. Обратите внимание, что мы можем добавлять к строке число без явной конвертации данных, а вот если число должно целиком образовывать строку, то его нужно преобразовывать явно методом ToString(). Также обратите внимание, что мы должны явно закрывать каждый из элементов нашего XML-документа, а также потом и весь документ целиком.

Теперь, когда наш XML-документ успешно записан, давайте посмотрим, каким образом можно считать из него данные.


Чтение данных

Добавьте на форму вашего приложения (если, конечно, оно у вас не консольное) компонент listBox для того, чтобы можно было следить за результатом чтения XML-файла. Ну а если ваша программа консольная , то вы с лёгкостью сможете перенаправить вывод на консоль.

Как обычно, сначала ознакомимся с кодом программы, а потом уже будем смотреть, что именно этот код делает.

XmlTextReader xml = new XmlTextReader(FileName); xml.WhitespaceHandling = WhitespaceHandling.None; int i = 0; while (xml.Read()){ if ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "subelement")) { listBox1.Items.Add("subelement " + i + " found"); i++; listBox1.Items.Add(" " + xml.GetAttribute("attrib1")); listBox1.Items.Add(" " + xml.GetAttribute("attrib2")); while (xml.Read()&(xml.Name == "subsubelement")){ listBox1.Items.Add(" " + xml.GetAttribute("attr")); } } } xml.Close();

Для чтения, как вы могли заметить, мы используем уже другой класс, а именно - XmlTextReader. Он находится в том же пространстве имён, что и класс, который мы использовали для записи данных. В первой строчке мы создаём экземпляр XmlTextReader"а, имеющий имя xml (здесь мы предполагаем, что переменная FileName уже определена нами ранее). Чтобы пропускать пустые строки, ежели такие неким непостижимым образом возникнут в нашем только что созданном XML-файле, мы используем следующую строку в приведенном фрагменте кода. Переменная i используется для подсчёта количества найденных элементов "subelement" в XML-файле, из которого производится считывание данных.

Дальше идёт цикл непосредственного чтения данных из файла. Метод Read() считывает следующий элемент XML-документа, и после его считывания мы проверяем, что именно мы считали. Если это действительно элемент "subelement", то мы добавляем информацию о считанном элементе в listBox1, инкрементируем переменную, содержащую количество считанных элементов, а затем считываем атрибуты элемента. После чтения атрибутов мы организуем отдельный цикл для чтения подэлементов "subsubelement" (обратите внимание, что для этого нам не требуется отдельного XmlTextReader"а) и атрибутов этих подэлементов. Как и ранее, все считанные сведения мы заносим в listBox1, чтобы контролировать правильность чтения.

При чтении XML-файлов, точно так же, как и при их записи, при конструировании XmlTextReader"а можно указать в качестве параметра поток, из которого будет производиться чтение, и тогда читать можно будет не только из файлов, но также и из других источников, примеры которых я уже приводил выше. Следует отметить одну полезную особенность класса XmlTextReader: при чтении он не загружает в память весь читаемый XML-документ, поэтому с его помощью удобно проводить разбор больших XML-документов (например, XML баз данных).


За кадром

В общем-то, пример, который мы с вами только что разобрали, чересчур прост для реальных проектов. В наше время при чтении XML-документов, как правило, применяется их валидация с помощью DTD, XML Schema или Relax NG. Валидация - это проверка соответствия разметки XML-документа некоторому стандарту, описываемому во внешнем файле. Валидация нужна для того, чтобы проверка документа не была жёстко зашита в алгоритм программы, а могла изменяться произвольным образом при изменении в формате данных без обновления считывающего или записывающего данные программного кода. К сожалению, сейчас мы с вами уже разобрать валидацию не успеем, поскольку, как вы сами понимаете, объём газетной статьи имеет определённые ограничения.

Ещё один интересный и полезный практический момент, касающийся работы с XML-данными, - это XSL-преобразование данных. Это преобразование применяется к данным при их отображении на HTML-страницах и, фактически, просто является применением определённого шаблона web-страницы к XML-файлу с какими-либо данными. Поскольку львиная доля теперешнего использования XML-данных так или иначе приходится на World Wide Web, то и XSL-преобразования рассмотреть было бы очень и очень неплохо.

Так что, думаю, у этой статьи будет продолжение - но, конечно, только в том случае, если вы сами (то есть читатели "Компьютерных вестей") об этом попросите на форуме или в письме на мой электронный почтовый адрес. Пока же об использовании XML в.NET-приложениях, пожалуй, всё. Надеюсь, что эта информация будет полезной для вас.



Рекомендуем почитать

Наверх