ASP.Net. Лекция 10. Работа с XML (исходники)Источник: ASPNET Mania Асмик Гаряка
Язык - не сын, а отец мысли. Аббревиатура 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-файла могут находиться комментарии в стиле HTML - <!-text -->. XML-документ может иметь только один корневой элемент. В него могут быть вложены другие узлы, а в них, в свою очередь - другие. Каждому открывающему тегу XML должен соответствовать закрывающий тег. После завершающего тега корневого элемента не может быть других тегов. Теги XML чувствительны к регистру (case-sensitive). Теги должны быть целиком вложены друг в друга. поэтому, код, допустимый в HTML
является ошибкой в 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 располагаются узлы <Ad> </Ad> У этих узлов имеются 5 атрибутов, все они необязательны.
Пример файла AdvertismentFile, он называется ads.xml.
На страницу помещен элемент управления. Его свойство AdvertisementFile указывает на этот файл.
Если установлено свойство Keyword, то элемент управления показывает только ту рекламу, которая соответствует его содержанию. Так как его можно менять динамически, можно подстраивать рекламу под нужды пользователя. Keyword должен встречаться хотя бы раз в файле объявлений, иначе вместо рекламы будет пустой прямоугольник. В предыдущих версиях ASP.NET можно было работать только с файлами XML. Теперь можно использовать любой источник данных, связавшись с элементом управления-источником данных. В таком случае необходимо указать как минимум 3 поля источника в свойствах ImageUrlField, NavigateUrlField и AlternateTextField.
Файлы преобразования документаИзвестно, что для форматирования HTML-файлов часто используются CSS (Cascading Stylesheets), хотя это необязательно, так как браузеры соотносят со всеми тегами определенный внешний вид. Элемент <p> задает параграф, <B> - полужирный шрифт - браузер знает, как их показывать. Поскольку XML не использует изначально заданные теги, их значение может быть каким угодно: <table> может означать таблицу HTML, а может и деревянный стол. Поэтому браузеры показывают XML-документы «как есть». Можно задать CSS файлы и для XML-документов, но это не рекомендуется. Для того, чтобы задать формат отображения XML-документов, используются таблицы стилей XSL. XSL - расширяемый язык стилей (Extensible Stylesheet Language) гораздо более богат возможностями, чем CSS. XSL - больше, чем просто таблица стилей. Один и тот же файл XML можно связать с разными таблицами XSL, в том числе программно. XSL состоит из 3 частей:
Самая важная часть XSL - это язык преобразований XSLT (XSL Transformation). Он применяется для преобразования XSL-документов в другие типы документов или другие XSL -документы. Часто XSLT используется для преобразования XSL-документа в формат HTML. Для того, чтобы создать XSLT-документ, выберите в диалоге создания файла XSLT file. VS 2005 создает каркас таблицы стилей. Так как таблица стилей сама по себе является XML-документом, она начинается с декларации XML.
Тег xsl:stylesheet задает начало таблицы стилей.
Если вы изучали CSS, то знаете, что для задания стилей используются правила. Правило состоит из селектора и описания стиля в фигурных скобках.
Это правило определяет стиль вывода гиперссылок среднего размера шрифтом фиолетовым цветом. В XSL используются шаблоны. Для связывания шаблона с XML-элементом используется атрибут соответствия. Тег xsl:template задает начало шаблона. Атрибут шаблона match="/"> связывает шаблон и корневой элемент исходного XML-документа.
В этот тег вложен шаблон HTML -файла. Комментарий напоминает о том, что туда нужно вставить XSL-элементы. Создание файлов XSLT рассмотрим на примере. Создайте в папке App_Data файл XML "Quotes.xml"
Чтобы внести в выходной поток XSLT-преобразования каждый XML-элемент, применяется тег XSL xsl:for-each. Элемент :for-each определяет местоположение элементов в XML-документе и повторяет шаблон для каждого из них.
Все, что находится в шаблоне, будет выводится столько раз, сколько в исходном документе встретится элемент Quote, заключенный в тег Quotes. Чтобы внести в выходной поток XSLT-преобразования значение XML-элемента, применяется тег XSL xsl:value-of:
Данные можно отсортировать с помощью тега xsl:sort, который должен находиться внутри элемента xsl:for-each:
XSL может применять условия для показа и форматирования информации в зависимости от значений элементов. «Условный оператор» имеет вид <xsl:choose>, в который вложены элементы <xsl:when> и возможно, <xsl:otherwise>. Условие задается в элементе <xsl:when> с помощью парамерта test:
Окончательный вид файла трансформации:
Если хотите увидеть результат преобразования документа в браузере, включите после 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 .
Создавая схемы XSD, можно
Например, это определение задает, что элемент "Author" строкового типа, должен появляться один и только один и раз, и если он не указан, то принимает значение "Пушкин".
Параметр maxOccurs="unbounded" указывает, что элемент может встречаться любое количество раз. Параметр ref позволяет ссылаться на уже описанный в данном файле глобальный элемент или атрибут, чтобы избежать повторного описания одних и тех же элементов.
В XSD есть предопределенные типы - примерно такие же, как в .NET. Во время работы приложения они преобразуются в типы .NET. На их основании можно строить сложные типы, похожие на структуры языков программирования. Сложный тип состоит из последовательности описаний элементов. Определим сложный тип
Тег <xs:sequence> определяет, что элементы в данном типе должны появляться в заданном порядке. Если бы использовался тег <xs:all>, то элементы могли бы появляться в любом порядке. Тег <xs:choice> похож на структуру с вариантами. Он определяет, что в элементе данног типа должен быть только один из вложенных элементов.
Простые типы тоже строятся на основе стандартных типов, накладывая разные ограничения. Типы могут быть глобальными или вложенными в определение элементов. В предыдущем примере определен глобальный сложный тип Quote. Глобальный тип можно использовать в определении элементов.
В следующем примере определен простой тип, вложенный в определение элемента MyValue.
Значениями этого типа могут быть целые положительные числа от 1 до 10. Простой тип может быть перечислением:
В определении сложного типа могут фигурировать атрибуты. Предположим, мы хотим построить схему такого файла:
Необходимо потребовать наличие атрибута Title:
Атрибуты могут быть только простых типов.
Аннотации позволяют вставлять описание существующих элементов, таким образом в файл добавляется документация.
<xs:documentation> предназначается для читателей файла, а <xs:appinfo> для обрабатывающих файл программ. Полное описание синтаксиса XSD можно прочитать по адресу http://www.w3.org/2001/XMLSchema.xsd Редактировать XSD-файлы в Visual Studio 2005 можно и через исходный код, и с помощью дизайнера. Для XML-документа можно автоматически сгенерировать соответсвующую ему схему. В окне свойств XML-документа можно задать как файл схемы, так и файл преобразования. В таком случае студия автоматически проверяет файл на соответствие схеме, и даже IntelliSense подставляет теги из этого файла. Класс XmlReaderС помощью класса XmlReader можно быстрее, чем другими методами, получить данные из XML-документов. XmlReader - это абстрактный класс. Чтобы начать чтение, в статический метод Create передается объект класса XmlReaderSettings. Эта функция подсчитывает число узлов в документе.
Класс XmlReader позволяет извлекать из документа классы CLR. Пусть у нас есть меню ресторана.
Напишем функцию, которая посчитает сумму цен и количества калорий в меню.
Класс XPathDocumentКласс обеспечивает чтение и хранение в памяти XML-документов для трансформаций с помощью XSL. По документу можно перемещаться в любом направлении и получать произвольный доступ к любому элементу, используя выражения XPath. Возьмем XML-документ "Quotes.xml"и файл трансформации XSL "Quotes.xsl". В выходной поток страницы будет направлен результат преобразования XML-документа.
Благодаря тому, что в файле трансформации определены табличные теги, на странице появится таблица с нужной информацией. Элемент управления 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 лекции.
Как и при связывании с помощью SQLDataSource, можно сокращенно писать
Так же, как и у DataBinder, метод Eval класса XPathBinder поддерживает строки форматирования:
Применим этот синтаксис в элементе DataList, который получает данные из источника данных XmlDataSource:
ЗаключениеВ этой лекции мы рассмотрели работу с данными типа XML. XML предоставляет универсальный способ для описания и обмена структурированной информацией, независимо от приложений и разработчиков. На этом завершили рассмотрение работы с источниками данных. |