Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 20:22:07
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

Программирование на C#. Что осталось за кадром. Работа с XML


Перейти к обзору всех тем

Этот раздел, по сути, является иллюстрацией к теме "Применение XML в прикладном программировании". В частности, здесь я собрал примеры кода на C#, реализующие валидацию XML документа, обработку XPath запроса и XSL преобразование структурированных данных из XML в другие форматы разметки.

XML и XSD

Для работы с XML схемами (XSD, Xml Schema Definition – язык описания структуры XML документа, синоним XML схемы) необходимо подключить следующие библиотеки: System.Xml и System.Xml.Schema. Пример кода демонстрирует, каким образом можно организовать проверку соответствия XML документа определенной XML схеме. В примере сам XML и XSD читаются из внешних файлов, но ничего не мешает их формировать в памяти. Например, можно заменить метод Load() на метод LoadXML(), а в качестве аргумента передать текст с нужной разметкой. Во всех примерах предполагается, что параметры передаются через командную строку.

using System;
using System.Xml;
using System.Xml.Schema;

namespace CSharpQuickGuide
{
    class XSDSample
    {
        static void Main(string[] args)
        {
            if (args.Length < 2)
                return;
            //XML DOM для чтения XML схемы
            XmlDocument _XSDDocument = new XmlDocument();
            //XSD DOM для работы с XML схемой
            XmlSchemaSet _XSDSchemaSet = new XmlSchemaSet();

            try
            {   //Чтение XSD из файла
                _XSDDocument.Load(args[0]);
                //Формирование XSD DOM
                _XSDSchemaSet.Add(null, new XmlNodeReader(_XSDDocument));  
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }

            XmlDocument _XMLDocument = new XmlDocument();

            try
            {   //Чтение XML из файла
                _XMLDocument.Load(args[1]);
                //Валидация XML по загруженной ранее XML схеме
                _XMLDocument.Schemas.Add(_XSDSchemaSet);
                _XMLDocument.Validate(new ValidationEventHandler(ValidationHandler));  
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }
        }
        //Обработчки ошибок валидации XML по схеме XSD
        private static void ValidationHandler(object sender, ValidationEventArgs _args)
        {
            if (_args.Severity == XmlSeverityType.Warning)
                throw new InvalidOperationException("Предупреждение: "+_args.Message, _args.Exception);
            else
                throw new InvalidOperationException("Ошибка: " + _args.Message, _args.Exception);
        }
    }
}

Сама валидация выполняется внутри метода Validate(). В качестве аргумента необходимо передать ссылку (делегат) на обработчик исключительных ситуаций типа ValidationEventHandler. Возбуждать исключения в теле ValidationHandler совсем не обязательно - можно реагировать на них “тихо”.

XML и XPath

Для обработки XPath запросов никаких специальных библиотек подключать нет необходимости. Достаточно будет базовых сервисов работы с XML System.Xml. Результат XPath запроса – это коллекция экземпляров XmlNode. Класс XmlNode является базовым классов для всех узлов документа: для элемента (XmlElement), атрибута (XmlAttribute), текста (XmlText) и других. Узнать, кто перед вами всегда можно по значению свойства NodeType и выполнить соответствующее приведение типов. В данном примере ничего подобного я не делаю, а просто вывожу текстовое представление каждого элемента (значение свойства базового класса OuterXml).

using System;
using System.Xml;

namespace CSharpQuickGuide
{
    class XPathSample
    {
        static void Main(string[] args)
        {
            if (args.Length < 2)
                return;

            XmlDocument _Document = new XmlDocument();

            try
            {   //Чтение XML из файла
                _Document.Load(args[0]);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }

            XmlNodeList _result = null;  

            try
            {
                //Выполнение XPath запроса, текст которого содержится в args[1]
                _result = _Document.SelectNodes(args[1]);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }

            //Вывод результата XPath запроса
            foreach (XmlNode _Node in _result)
                Console.WriteLine(_Node.OuterXml);  
        }
    }
}

XML и XSL

В случае с XSL преобразованиями все более серьезно, поскольку его результатом является новый структурированный документ. Необходимо, помимо сервисов XML и XSL также подключить библиотеку стандартных сервисов ввода вывода System.IO и обработки текста System.Text. Схема XSL преобразования сама по себе является XML документом, поэтому, для ее чтения можно использовать класс XmlDocument. XML, который выступает в качестве исходных данных для трансформации загружать не будем. Этим займется сервис трансформации XslCompiledTransform, а наша задача передать ему путь к исходным данным (args[1]) и предоставить сервис для записи результата – экземпляр XmlTextWriter. XmlTextWriter будет писать результат в текстовый буфер, организованный экземпляром класса StringBuilder. Содержимое буфера после завершения XSL преобразования будет выведено на экран.

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Xsl;

namespace CSharpQuickGuide
{
    class XSLSample
    {
        static void Main(string[] args)
        {
            if (args.Length < 2)
                return;

            //XML DOM для чтения XSL
            XmlDocument _XSLDocument = new XmlDocument();
            //XSL DOM
            XslCompiledTransform _XSL = new XslCompiledTransform();

            try
            {   //Чтение XSL из файла
                _XSLDocument.Load(args[0]);
                //Формирование XSL DOM
                _XSL.Load(new XmlNodeReader(_XSLDocument)); 
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }
            //Буфер для хранения результата XSL трансформации
            StringBuilder _result = new StringBuilder(); 

            try
            {
                using (XmlWriter _writer = new XmlTextWriter(new StringWriter(_result)))
                {
                    //Трансформация XML из файла args[1] в буфер
                    _XSL.Transform(args[1], _writer);  
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }

            //Вывод результата XSL трансформации
            Console.WriteLine(_result.ToString());  
        }
    }
}

На этом про XML и его использование в программировании на C# у меня все.



Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.