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

В первой статье в блоге .NET «Работаем с XML » в комментариях народ потребовал статьи LINQ to XML. Что же, попробуем раскрыть принципы работы этой новой технологии от Microsoft.

Создадим базу для ведения каталога аудиозаписей. База будет состоять из треков:

  • Название
  • Исполнитель
  • Альбом
  • Продолжительность
Мы научимся добавлять, редактировать, удалять и делать различные выборки из нашей базы.

Для начала создадим консольное приложение (я пишу свои проекты на C#, но суть в общем-то понятна будет всем) и подключим необходимое пространство имен

Using System.Xml.Linq;

Создание файлов XML

Создадим XML файл нашей базы содержащий несколько тестовых записей уже при помощи LINQ:

//задаем путь к нашему рабочему файлу XML string fileName = "base.xml"; //счетчик для номера композиции int trackId = 1; //Создание вложенными конструкторами. XDocument doc = new XDocument(new XElement("library", new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Rap"), new XAttribute("time", "3:24"), new XElement("name", "Who We Be RMX (feat. 2Pac)"), new XElement("artist", "DMX"), new XElement("album", "")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Rap"), new XAttribute("time", "5:06"), new XElement("name", "Angel (ft. Regina Bell)"), new XElement("artist", "DMX"), new XElement("album", "...And Then There Was X")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Break Beat"), new XAttribute("time", "6:16"), new XElement("name", "Dreaming Your Dreams"), new XElement("artist", "Hybrid"), new XElement("album", "Wide Angle")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Break Beat"), new XAttribute("time", "9:38"), new XElement("name", "Finished Symphony"), new XElement("artist", "Hybrid"), new XElement("album", "Wide Angle")))); //сохраняем наш документ doc.Save(fileName);

Теперь в папке с нашей программой после запуска появится XML файл следующего содержания:
Who We Be RMX (feat. 2Pac) DMX The Dogz Mixtape: Who"s Next?! Angel (ft. Regina Bell) DMX ...And Then There Was X Dreaming Your Dreams Hybrid Wide Angle Finished Symphony Hybrid Wide Angle

Для создания подобного файла средствами XmlDocument кода понадобилось где-то раза в 2 больше. В коде выше мы воспользовались конструктором класса XDocument, который принимает в качестве параметра перечень дочерних элементов, которыми мы изначально хотим инициализировать документ. Используемый конструктор XElement принимает в качестве параметра имя элемента, который мы создаем, а так же перечень инициализирующих элементов. Удобно то, что мы в этих элементах можем задавать как новые XElement, так и XAttribute. Последние отрендретятся в наш файл как атрибуты самостоятельно. Если вам не нравится использоваться такую вложенность конструкторов и вы считаете такой код громоздким, то можно переписать в более традиционный вариант. Код ниже даст на выходе аналогичный XML файл:

XDocument doc = new XDocument(); XElement library = new XElement("library"); doc.Add(library); //создаем элемент "track" XElement track = new XElement("track"); //добавляем необходимые атрибуты track.Add(new XAttribute("id", 1)); track.Add(new XAttribute("genre", "Rap")); track.Add(new XAttribute("time", "3:24")); //создаем элемент "name" XElement name = new XElement("name"); name.Value = "Who We Be RMX (feat. 2Pac)"; track.Add(name); //создаем элемент "artist" XElement artist = new XElement("artist"); artist.Value = "DMX"; track.Add(artist); //Для разнообразия распарсим элемент "album" string albumData = "The Dogz Mixtape: Who"s Next?!"; XElement album = XElement.Parse(albumData); track.Add(album); doc.Root.Add(track); /* *остальные элементы добавляем по аналогии */ //сохраняем наш документ doc.Save(fileName);

Естественно выбирать необходимый способ нужно по ситуации.

Чтение данных из файла

//задаем путь к нашему рабочему файлу XML string fileName = "base.xml"; //читаем данные из файла XDocument doc = XDocument.Load(fileName); //проходим по каждому элементу в найшей library //(этот элемент сразу доступен через свойство doc.Root) foreach (XElement el in doc.Root.Elements()) { //Выводим имя элемента и значение аттрибута id Console.WriteLine("{0} {1}", el.Name, el.Attribute("id").Value); Console.WriteLine(" Attributes:"); //выводим в цикле все аттрибуты, заодно смотрим как они себя преобразуют в строку foreach (XAttribute attr in el.Attributes()) Console.WriteLine(" {0}", attr); Console.WriteLine(" Elements:"); //выводим в цикле названия всех дочерних элементов и их значения foreach (XElement element in el.Elements()) Console.WriteLine(" {0}: {1}", element.Name, element.Value); }

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

Track 1 Attributes: id="1" genre="Rap" time="3:24" Elements: name: Who We Be RMX (feat. 2Pac) artist: DMX album: The Dogz Mixtape: Who"s Next?! track 2 Attributes: id="2" genre="Rap" time="5:06" Elements: name: Angel (ft. Regina Bell) artist: DMX album: ...And Then There Was X track 3 Attributes: id="3" genre="Break Beat" time="6:16" Elements: name: Dreaming Your Dreams artist: Hybrid album: Wide Angle track 4 Attributes: id="4" genre="Break Beat" time="9:38" Elements: name: Finished Symphony artist: Hybrid album: Wide Angle

Изменение данных

Попробуем пройтись по всем узлам library и увеличить аттрибут Id элемента track на 1.
(дальше писать объявление пути к файлу и результат вывода в консоль я приводить не буду, чтобы не перегружать лишней информацией статью, все компилировал, все работает:)) :

//Получаем первый дочерний узел из library XNode node = doc.Root.FirstNode; while (node != null) { //проверяем, что текущий узел - это элемент if (node.NodeType == System.Xml.XmlNodeType.Element) { XElement el = (XElement)node; //получаем значение аттрибута id и преобразуем его в Int32 int id = Int32.Parse(el.Attribute("id").Value); //увеличиваем счетчик на единицу и присваиваем значение обратно id++; el.Attribute("id").Value = id.ToString(); } //переходим к следующему узлу node = node.NextNode; } doc.Save(fileName);

Теперь попробуем это сделать более правильным способом для наших задач:

Foreach (XElement el in doc.Root.Elements("track")) { int id = Int32.Parse(el.Attribute("id").Value); el.SetAttributeValue("id", --id); } doc.Save(fileName);

Как видим – этот способ нам подошел больше.

Добавление новой записи

Добавим новый трек в нашу библиотеку, а заодно вычислим средствами LINQ следующий уникальный Id для трека:

Int maxId = doc.Root.Elements("track").Max(t => Int32.Parse(t.Attribute("id").Value)); XElement track = new XElement("track", new XAttribute("id", ++maxId), new XAttribute("genre", "Break Beat"), new XAttribute("time", "5:35"), new XElement("name", "Higher Than A Skyscraper"), new XElement("artist", "Hybrid"), new XElement("album", "Morning Sci-Fi")); doc.Root.Add(track); doc.Save(fileName);

Вот таким подним запросом ко всем элементам вычисляется максимальное значение аттрибута id у треков. При добавлении полученное максимальное значение инкрементируем. Само же добавление элемента сводится к вызову метода Add. Обратите внимание, что добавляем элементы в Root, так как иначе нарушим структуру XML документа, объявив там 2 корневых элемента. Так же не забывайте сохранять ваш документ на диск, так как до момента сохранения никакие изменения в нашем XDocument не отразятся в XML файле.

Удаление элементов

Попробуем удалить все элементы исполнителя DMX:

IEnumerable tracks = doc.Root.Descendants("track").Where(t => t.Element("artist").Value == "DMX").ToList(); foreach (XElement t in tracks) t.Remove();

В этом примере мы вначале выбрали все треки у который дочерний элемент artst удовлетворяет критерии, а потом в цикле удалили эти элементы. Важен вызов в конце выборки ToList(). Этим самым мы фиксируем в отдельном участке памяти все элементы, которые хотим удалить. Если же мы надумаем удалять из набора записей, по которому проходим непосредственно в цикле, мы получим удаление первого элемента и последующий NullReferenceException. Так что важно помнить об этом.
По совету xaoccps удалять можно и более простым способом:
IEnumerable tracks = doc.Root.Descendants("track").Where(t => t.Element("artist").Value == "DMX"); tracks.Remove();
В этом случае приводить к списку наш полученный результат вызовом функции ToList() не нужно. Почему этот способ не использовал изначально описал в

Язык - не сын, а отец мысли.
Оскар Уайльд

Аббревиатура XML расшифровывается как Extensible Markup Language, в переводе «расширяемый язык разметки». Как и язык HTML, он является подмножеством SGML (Standard General Markup Language) - «дедушки» языков разметки. Мы уже не раз сталкивались с форматом XML. Таков формат конфигурационных файлов, файла описания объектных источников данных.

XML - это универсальный, независящий от платформы стандарт описания информациии, который можно использовать для представления иерархических данных и унификации передаваемой информации. Без его знания невозможно понимание SOAP и следовательно, веб-сервисов. XML стал де-факто стандартом передачи данных в сети Интернет. Стандарт XML и связанных с ним форматов определяется консорциумом W3C(World Wide Web Consortium). Например, мы создаем aspx страницы в формате XHTML - переходном между HTML и XML, стандарт которого тоже определен W3C. Стандарт XHTML налагает более строгие правила на правильное формирование документа, аналогичные правилам XML.

Давайте поймем главное отличие XML от HTML. XML создан для описания данных и фокусируется на том, что именно они из себя представляют. HTML создан для демонстрации данных и фокусируется на том, как данные выглядят. Если в традиционном HTML понятия «представление» и «визуализация» часто смешиваются, то при работе с XML мы четко разделяем эти понятия. Теги XML не предопределены создателями языка, в отличие от тегов HTML. Каждый автор документа сам определяет собственные теги.

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

В начале XML-документа обязательно появляется его декларация, или пролог. В нем указывается версия стандарта XML, которому он соответствует.

является ошибкой в XML.

У тегов могут быть атрибуты. Значения атрибутов должны быть заключены в кавычки. Порядок атрибутов значения не имеет. Между открывающим и закрывающими тегами может находится текст. В XML сохраняются все пробелы, находящиеся в тексте. Если текста нет, можно применить сокращенную форму записи. Пример тега XML:

Это краткая форма тега

Вам это ничего не напоминает? Правила описания элементов ASP.NET точно такие же.

Существует атрибут xmlns, который определяет пространство имен. Значением его может быть любое уникальное имя. Существует договоренность использовать URL, так как они уникальны. Пространства имен имеют смысл, аналогичный их применению в.NET Framework - чтобы не смешивать одинаковые имена, используемые разными разработчиками. Название пространства имен отделяется от имени двоеточием.

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

Документы XML, удовлетворяющие всем требованиям синтаксиса, называют правильными (well-formed). Для описания данных XML использует DTD (Document Type Definition) - определение типа документа. Если файл соответствует DTD, он считается действительным (valid) .

Браузеры IE 6.0, FireFox 1.5 отображают XML-файлы с выделением синтаксиса. Родительские узлы можно раскрывать и закрывать. Например, в закрытом виде корневой узел файла BirthDay.xml выглядит так:

Среды разработки Visual Studio и VWD Express проверяют правильность xml-документов прямо во время редактирования.

AdRotator

Элемент управления AdRotator позволяет показывать рекламные баннеры и автоматически заменять их на другие. Сами баннеры описаны в файле XML или другом источнике данных. Реклама обновляется каждый раз при обновлении страницы. В свойстве AdvertismentFile задается имя XML-файла. Скелет XML-файла таков.

Внутри узла Advertisements располагаются узлы

У этих узлов имеются 5 атрибутов, все они необязательны.

Пример файла AdvertismentFile, он называется ads.xml.

fixed.gif http://www.im.am Бесплатный хостинг 40 хостинг logo2.jpg http://www.nv.am Газета "Новое время" 50 новости summer.jpg http://www.utro.ru Певицу Жасмин избил муж! 100 желтые новости

На страницу помещен элемент управления. Его свойство AdvertisementFile указывает на этот файл.

Если установлено свойство Keyword, то элемент управления показывает только ту рекламу, которая соответствует его содержанию. Так как его можно менять динамически, можно подстраивать рекламу под нужды пользователя. Keyword должен встречаться хотя бы раз в файле объявлений, иначе вместо рекламы будет пустой прямоугольник.

В предыдущих версиях ASP.NET можно было работать только с файлами XML. Теперь можно использовать любой источник данных, связавшись с элементом управления-источником данных. В таком случае необходимо указать как минимум 3 поля источника в свойствах ImageUrlField, NavigateUrlField и AlternateTextField.

Файлы преобразования документа

Известно, что для форматирования HTML-файлов часто используются CSS (Cascading Stylesheets), хотя это необязательно, так как браузеры соотносят со всеми тегами определенный внешний вид. Элемент

Задает параграф, - полужирный шрифт - браузер знает, как их показывать.

Поскольку XML не использует изначально заданные теги, их значение может быть каким угодно:

может означать таблицу HTML, а может и деревянный стол. Поэтому браузеры показывают XML-документы «как есть». Можно задать CSS файлы и для XML-документов, но это не рекомендуется.

Для того, чтобы задать формат отображения XML-документов, используются таблицы стилей XSL . XSL - расширяемый язык стилей (Extensible Stylesheet Language) гораздо более богат возможностями, чем CSS. XSL - больше, чем просто таблица стилей.

Один и тот же файл XML можно связать с разными таблицами XSL, в том числе программно.

XSL состоит из 3 частей:

  1. XSLT - метода преобразования XML-документов
  2. XPath - метода задания частей и путей к элементам XML
  3. XSL Formatting Objects - метода форматирования XML-документов

Самая важная часть XSL - это язык преобразований XSLT (XSL Transformation). Он применяется для преобразования XSL-документов в другие типы документов или другие XSL -документы. Часто XSLT используется для преобразования XSL-документа в формат HTML.

Для того, чтобы создать XSLT-документ, выберите в диалоге создания файла XSLT file. VS 2005 создает каркас таблицы стилей. Так как таблица стилей сама по себе является XML-документом, она начинается с декларации XML.

Если вы изучали CSS, то знаете, что для задания стилей используются правила. Правило состоит из селектора и описания стиля в фигурных скобках.

В этот тег вложен шаблон HTML -файла. Комментарий напоминает о том, что туда нужно вставить XSL-элементы.

Создание файлов XSLT рассмотрим на примере. Создайте в папке App_Data файл XML "Quotes.xml"

Хотели как лучше, а получилось как всегда. Виктор Черномырдин Америка - континент, названный так потому, что его открыл Колумб. Жорж Элгози Я прихожу в бешенство от одной мысли о том, сколько бы я всего узнал, если бы не ходил в школу. Джордж Бернард Шоу Многое придумано для того, чтобы не думать. Карел Чапек Если скажешь правду, все равно рано или позно попадешься. Оскар Уайльд Быть ему президентом, если его до той поры не повесят. Марк Твен

Чтобы внести в выходной поток XSLT-преобразования каждый XML-элемент, применяется тег XSL xsl:for-each. Элемент:for-each определяет местоположение элементов в XML-документе и повторяет шаблон для каждого из них.

Данные можно отсортировать с помощью тега xsl:sort, который должен находиться внутри элемента xsl:for-each:

Окончательный вид файла трансформации:

Известные цитаты

Цитата Автор

Если хотите увидеть результат преобразования документа в браузере, включите после XML-декларации объявление

,

или выберите в меню XML пункт Show XML Output и определите файл преобразования.

Тот же самый XML-документ можно преобразовать с помощью другого XSL-файла:

Мастера Афоризма



В результате будет выводиться цитаты, разделенные горизонтальной линией.

Файлы определения схемы документа

Согласно современному стандарту, валидный документ должен соответствовать связанному с ним файлу XSD (XML Schema Definition) - файлу определения схемы XML, который определяет конкретный язык, то есть описывает, какие элементы и типы могут появляться в документе. Схемы XSD призваны заменить DTD (Document Type Definition), разница между ними заключается в том, что файлы XSD сами тоже используют синтаксис XML. Схемы XSD позволяют определить, какие теги разрешены, обязательны они или нет, могут ли повторяться в документе и так далее. Таким образом, XML описывает данные, а XSD - структуру этих данных, или метаданные. В терминах программирования, XSD - описание типов, в то время как в XML-файле описаны объекты этих типов. По адресу http://www.w3.org/TR/2003/WD-xmlschema-11-req-20030121/ находится рабочий проект стандарта XSD 1.1.

Файл описания схемы начинается с описания префикса пространства имен, который включается затем во все элементы этого файла. Адрес http://tempuri.org предназначается для задания URI для пространств имен ASP.NET .

Например, это определение задает, что элемент "Author" строкового типа, должен появляться один и только один и раз, и если он не указан, то принимает значение "Пушкин".

Параметр maxOccurs="unbounded" указывает, что элемент может встречаться любое количество раз.

Параметр ref позволяет ссылаться на уже описанный в данном файле глобальный элемент или атрибут, чтобы избежать повторного описания одних и тех же элементов.

  1. определить простые и сложные типы.

В XSD есть предопределенные типы - примерно такие же, как в.NET. Во время работы приложения они преобразуются в типы.NET. На их основании можно строить сложные типы, похожие на структуры языков программирования. Сложный тип состоит из последовательности описаний элементов. Определим сложный тип

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

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

В следующем примере определен простой тип, вложенный в определение элемента MyValue.

  1. Добавлять новые группы и группы атрибутов.

В определении сложного типа могут фигурировать атрибуты. Предположим, мы хотим построить схему такого файла:

Атрибуты могут быть только простых типов.

  1. Добавлять аннотации.

Аннотации позволяют вставлять описание существующих элементов, таким образом в файл добавляется документация.

Цитаты разных авторов

предназначается для читателей файла, а для обрабатывающих файл программ.

Редактировать XSD-файлы в Visual Studio 2005 можно и через исходный код, и с помощью дизайнера. Для XML-документа можно автоматически сгенерировать соответсвующую ему схему. В окне свойств XML-документа можно задать как файл схемы, так и файл преобразования. В таком случае студия автоматически проверяет файл на соответствие схеме, и даже IntelliSense подставляет теги из этого файла.

Класс XmlReader

С помощью класса XmlReader можно быстрее, чем другими методами, получить данные из XML-документов.

XmlReader - это абстрактный класс. Чтобы начать чтение, в статический метод Create передается объект класса XmlReaderSettings. Эта функция подсчитывает число узлов в документе.

using System.Xml; using System.IO; private int CountNodes(string xmlFile) { int NodesCount=0; XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; settings.IgnoreComments = true; using (XmlReader reader = XmlReader.Create(xmlFile, settings)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { NodesCount++; } } } return NodesCount; }

Класс XmlReader позволяет извлекать из документа классы CLR. Пусть у нас есть меню ресторана.

Напишем функцию, которая посчитает сумму цен и количества калорий в меню.

protected void Page_Load(object sender, EventArgs e) { int ItemsCount = 0; decimal DishesTotal = 0; UInt16 CaloriesTotal = 0; XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; NameTable nt = new NameTable(); object food = nt.Add("food"); object price = nt.Add("price"); object calories = nt.Add("calories"); settings.NameTable = nt; string MenuFile = Path.Combine(Request.PhysicalApplicationPath, "menu.xml"); using (XmlReader reader = XmlReader.Create(MenuFile, settings)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && food.Equals(reader.LocalName)) { ItemsCount++; } if (reader.NodeType == XmlNodeType.Element && price.Equals(reader.LocalName)) { DishesTotal += (UInt16)reader.ReadElementContentAsDecimal(); } if (reader.NodeType == XmlNodeType.Element && calories.Equals(reader.LocalName)) { CaloriesTotal += (UInt16)reader.ReadElementContentAsInt(); } } } Response.Write(String.Format("Вы заказали {0} блюда на сумму {1:C}, {2} калорий", ItemsCount, DishesTotal, CaloriesTotal)); }

Класс XPathDocument

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

Возьмем XML-документ "Quotes.xml"и файл трансформации XSL "Quotes.xsl". В выходной поток страницы будет направлен результат преобразования XML-документа.

<% XPathDocument doc = new XPathDocument(Server.MapPath("App_Data\\Quotes.xml")); XslCompiledTransform xsl = new XslCompiledTransform(); xsl.Load(Server.MapPath("App_Data\\Quotes.xsl")); xsl.Transform(doc, null, Response.OutputStream); %>

Благодаря тому, что в файле трансформации определены табличные теги, на странице появится таблица с нужной информацией.

Элемент управления XML

Элемент управления XML предоставляет способ преобразовать XML-документ, используя таблицу стилей XSL. Свойство DocumentSource позволяют задать XML-файл, в котором находятся данные, TransformSource - файл трансформации XSLT.

В предыдущем примере того же результата можно достичь, если поставить на странице элемент управления XML.

XMLDataSource

Элемент -источник данных XMLDataSource обеспечивает простой способ подключения XML-документов как источников данных к элементам, отображающим информацию. Также можно задать запрос XPath для того, чтобы отфильтровать данные. Как и SqlDataSource, он позволяет редактировать, удалять, добавлять записи данных. Для этого нужно получить доступ к находящемуся в нем объекту XmlDataDocument с помощью вызова метода GetXmlDocument. После редактирования документ сохраняется с помощью метода Save.

В отличие от табличных данных в СУБД, данные в XML-файлах иерархичны, поэтому XMLDataSource удобно привязывать к иерархичным элементам управления, например Menu.

Синтаксис привязки к данным XML

Так как в приложениях XML-данные используются все чаще и чаще, был введен метод привязки данных, полученных из XMLDataSource.

Эти методы работают так же, как Bind и Eval, которые обсуждались в 7 лекции.

Применим этот синтаксис в элементе DataList, который получает данные из источника данных XmlDataSource:

Заключение

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

Уже довольно много времени прошло с тех пор, как я пообещал рассказать о работе с данными в формате 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-приложениях, пожалуй, всё. Надеюсь, что эта информация будет полезной для вас.

Инструментальные средства редактирования, проверки корректности, форматирования, сравнения XML-файлов, а также средства поддержки XQuery, XPath, карт сайтов, схем и RSS-фидов

Часто используемые сокращения
  • API: Application Programming Interface (прикладной интерфейс программирования)
  • DITA: Darwin Information Typing Architecture (архитектура типизированной информации Darwin)
  • DTD: Document Type Definition (определение типа документа)
  • HTML: Hypertext Markup Language (язык разметки гипертекста)
  • IDE: Integrated Development Environment (интегрированная среда разработки)
  • URL: Uniform Resource Locator (унифицированный указатель ресурсов)
  • W3C: World Wide Web Consortium (консорциум WWW)
  • WSDL: Web Services Description Language (язык описания веб-сервисов)
  • XHTML: Extensible Hypertext Markup Language (расширяемый язык разметки гипертекста)
  • XML: Extensible Markup Language (расширяемый язык разметки)
  • XSLT: Extensible Stylesheet Language Transformations (расширяемый язык преобразований таблиц стилей)

При выборе инструментальных средств для работы с 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. Ссылки на все перечисленные инструментальные средства приведены в разделе .

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

  • Trang от ThaiOpenSource – программа, запускаемая из командной строки, генерирует 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-содержимого без установки каких-либо инструментальных средств попробуйте один из следующих интерактивных сервисов. Ссылки на все перечисленные инструментальные средства приведены в разделе .

  • XMLIndent.com
  • X01 online xml formatter

Редакторы XML

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

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

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

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

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

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

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

  • XSLT Online Transformation
  • W3C Online XSLT 2.0 Service

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

Mozilla Firefox

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

Google Chrome

  • XML Tree отображает XML-данные в удобном для пользователя виде.
  • XML Viewer – инструмент просмотра XML-документов для Google Chrome.

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

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

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

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

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

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

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

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

XPontus XML Editor – это 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-файлов.

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

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

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.

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

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

firstobject XML Editor – бесплатный XML-редактор. Позволяет напрямую редактировать XML-дерево, отображаемое на основании содержимого XML-документа. Позволяет загружать и обрабатывать большие файлы. Некоторые его функциональных возможностей редактора:

  • Быстрый, переносимый, основанный на CMarkup.
  • Не требует Java или MSXML.
  • Поддержка переноса строк.
  • Проверка на соответствие DTD на основе MSXML.
  • Переход на строку по номеру.
  • Отображение XPath.
  • Редактирование файлов в закладках.
  • Генерирование C++-кода.

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-документами. Ссылки на все перечисленные инструментальные средства приведены в разделе .

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).
  • Simple online XPath tester .
  • XSLT Tryit Editor (W3Schools.com).

Заключение

Поддержка технологии XML предусмотрена во многих инструментальных средствах. Как пользователю XML, вам следует проанализировать свои потребности и выбрать подходящее инструментальное средство. Например, если вам нужно выполнять много разных операций, можно выбрать XML IDE с такими дополнительными функциональными возможностями, как редактирование, проверка корректности и т.д. Для узких задач (например, для сравнения 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 документа на валидность. Или преобразовать его содержимое в схему.




Top