Что такое код xml_parser_create


Содержание

CIV. Функции разборщика XML

XML (eXtensible Markup Language) это формат данных для обмена структурированными документами в Web. Это стандарт, созданный консорциумом World Wide Web consortium (W3C). Информация о XML и сопутствующих технологиях находится на сайте http://www.w3.org/XML/

Установка

Это расширение использует библиотеку expat, которую можно найти на http://www.jclark.com/xml/. Makefile, который поставляется вместе с expat, не строит библиотеку по умолчанию. Вы можете использовать такое make-правило:

Заметьте, что при использовании Apache-1.3.7 или новее у вас уже имеется соответствующая библиотека expat. Просто сконфигурируйте PHP с использованием —with-xml (без дополнительного пути), и он будет автоматически использовать библиотеку expat, встроенную в Apache.

В UNIX — запустите configure с опцией —with-xml . Библиотека expat должна быть установлена в таком месте, где компилятор сможет её найти. Если вы компилируете PHP как модуль для Apache 1.3.9 или новее, PHP будет автоматически использовать связанную библиотеку expat из Apache. Вам может понадобиться установка флагов CPPFLAGS и LDFLAGS в вашем окружении до запуска configure , если вы установили expat как-то экзотично.

Постройте PHP. Tada! Вот и всё.

Об этом расширении

Это расширение PHP реализует поддержку expat James’а Clark’а в PHP. Этот набор утилит позволяет разбирать, но не проверять, XML-документы. Он поддерживает три исходные кодировки символов, также предоставляемые PHP: US-ASCII , ISO-8859-1 и UTF-8 . UTF-16 не поддерживается.

Это расширение позволяет создавать XML-разборщики и определять обработчики различных XML-событий. Каждый XML-разборщик также имеет несколько параметров, которые вы можете настроить.

Вот имеющиеся XML-обработчики:

Таблица 1. Поддерживаемые XML-обработчики

Функция PHP для установки обработчика Описание события
xml_set_element_handler() События элементов возникают, когда XML-разборщик обнаруживает начальный или конечный тэги. Для начальных и конечных тэгов имеются отдельные обработчики.
xml_set_character_data_handler() Символьные данные это, ориентировочно, всё неразмеченное содержимое XML-документов, включая пробелы между тэгами. Заметьте, что XML-разборщик не добавляет и не удаляет пробелы, это обязанность приложения (ваша) — решить, имеет ли пробел значение.
xml_set_processing_instruction_handler() PHP-программисты должны быть уже знакомы с инструкциями процессинга/processing instructions (PI). это инструкция процессинга, где php это вызванная «цель PI». Их обработка зависит от приложения, за исключением того, что все цели PI, начинающиеся с «XML», зарезервированы.
xml_set_default_handler() То, что не выполняется другим обработчиком, выполняет обработчик по умолчанию. В нём вы будете делать такие вещи как объявления типов XML и документа.
xml_set_unparsed_entity_decl_handler() Этот обработчик будет вызываться для объявления неразбираемого/unparsed (NDATA) экземпляра.
xml_set_notation_decl_handler() Этот обработчик вызывается для объявления нотации.
xml_set_external_entity_ref_handler() Этот обработчик вызывается, когда XML-разборщик находит ссылку на внешний разбираемый общий экземпляр. Это может быть ссылка на файл или URL, например. См. демонстрацию в примере внешнего экземпляра.

Выравнивание регистра/Case Folding

Функции обработчиков элементов могут получать имена своих элементов case-folded . Case-folding определяется стандартом XML как «процесс, применяемый к последовательности символов, когда те из них, которые идентифицируются как non-uppercase/не в верхнем регистре, заменяются своими эквивалентами верхнего регистра». Иначе говоря, если речь идёт о XML, case-folding означает перевод в верхний регистр.

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

Следующие константы определены для кодов ошибок XML (как возвращаемые xml_parse() ):

XML_ERROR_NONE
XML_ERROR_NO_MEMORY
XML_ERROR_SYNTAX
XML_ERROR_NO_ELEMENTS
XML_ERROR_INVALID_TOKEN
XML_ERROR_UNCLOSED_TOKEN
XML_ERROR_PARTIAL_CHAR
XML_ERROR_TAG_MISMATCH
XML_ERROR_DUPLICATE_ATTRIBUTE
XML_ERROR_JUNK_AFTER_DOC_ELEMENT
XML_ERROR_PARAM_ENTITY_REF
XML_ERROR_UNDEFINED_ENTITY
XML_ERROR_RECURSIVE_ENTITY_REF
XML_ERROR_ASYNC_ENTITY
XML_ERROR_BAD_CHAR_REF
XML_ERROR_BINARY_ENTITY_REF
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF
XML_ERROR_MISPLACED_XML_PI
XML_ERROR_UNKNOWN_ENCODING
XML_ERROR_INCORRECT_ENCODING
XML_ERROR_UNCLOSED_CDATA_SECTION
XML_ERROR_EXTERNAL_ENTITY_HANDLING

XML-расширение РНР поддерживает набор символов Unicode через различные кодировки символов. Есть два типа кодировок символов, кодировка источника и кодировка цели. Внутреннее представление документа в PHP всегда кодируется в UTF-8 .

Кодировка источника делается, когда XML-документ разбирается. После создания XML-разборщика кодировка источника может быть специфицирована (эта кодировка не может быть изменена позднее, в период существования XML-разборщика). Поддерживаются кодировки источника ISO-8859-1 , US-ASCII и UTF-8 . Первые две это однобайтные кодировки, то есть каждый символ представлен одним байтом. UTF-8 может кодировать символы, составленные из переменного количества бит (до 21) в 1-4 байтах. По умолчанию кодировка источника в РНР — ISO-8859-1 .

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

Если XML-разборщик находит символы вне диапазона представления исходной кодировки, он возвратит ошибку.

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

Вот примеры скриптов PHP, разбирающих XML-документы.

Пример структуры XML-элементов

В первом примере отображается структура стартовых элементов документа с отступом.

Пример 1. Показ структуры XML-элементов

Пример Отображения XML-тэгов

Пример 2. Отображение XML в HTML

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

Пример внешнего экземпляра XML

Этот пример разъясняет XML-код. Он показывает, как использовать обработчик ссылки на внешний экземпляр для включения и разбора других документов, а также то, как можно обработать PI, и способ определения «trust/доверия» PI, содержащим код.

PHP xml_parser_create() Function

Определение и использование

xml_parser_create() функция создает XML — анализатор.

Эта функция возвращает дескриптор ресурса для использования других функций XML в случае успеха, или FALSE при неудаче.

Синтаксис

параметр Описание
encoding Необязательный. Задает кодировку выходных данных. По умолчанию в PHP 5.0.2 и новее является UTF-8

Note: В PHP 5, вход кодирования автоматически. В PHP 4 и более ранних версий, это paramterer указывает кодировку символов для ввода и вывода

Note: В PHP 5.0.0 и 5.0.1, выход кодировка по умолчанию ISO-8859-1

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

Tip: Для того, чтобы освободить XML — парсер, используйте xml_parser_free() функцию.

Tip: Для того, чтобы создать XML — анализатор с поддержкой пространств имен, используйте xml_parser_create_ns() функцию вместо этого.

xml_parser_create

(PHP 3>= 3.0.6, PHP 4)

xml_parser_create — создаёт XML-разборщик.

Описание

resource xml_parser_create ([string encoding])

Какую кодировку символов должен использовать разборщик.

Поддерживаются следующие кодировки символов:

ISO-8859-1 (по умолчанию)
US-ASCII
UTF-8

Эта функция создаёт XML-разборщик и возвращает дескриптор для использования другими XML-функциями. Возвращает FALSE при неудаче.

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

Автор: Кен Скрибнер (Kenn Scribner)
Перевод: Александр Шаргин
Источник: «Visual C++ Developer», Ноябрь 2000

Опубликовано: 17.04.2001
Исправлено: 20.06.2007
Версия текста: 1.0

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

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

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

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

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

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

  • Загружает XML-файл с диска.
  • Отыскивает определённый узел и добавляет к нему дочерний узел.
  • Находит ещё один узел и отображает содержащийся в нём текст.
  • Сохраняет изменённый документ на диск.

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

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

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

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

Далее мы напечатаем сообщение, содержащееся в узле xmltext («Hello, World!»), и сохраним полученный документ в файл updatedxml.xml. После этого вы сможете посмотреть результаты, используя текстовый редактор или Internet Explorer 5.x. Давайте займёмся кодом.

Прежде всего приложение инициализирует библиотеку COM, а затем создаёт экземпляр парсера MSXML:

Если нам удалось создать экземпляр парсера, мы загружаем в него XML-документ:

Поиск узла осуществляется через объект документа, поэтому мы используем IXMLDOMDocument::selectSingleNode() для обнаружения нужного узла по его имени. Есть и другие способы, но этот наиболее прост, в том случае, если вы точно знаете, какой узел вам требуется.

Другие методы, о которых вам следует знать, — это IXMLDOMDocument::nodeFromID() и IXMLDOMElement::getElementsByTagName(), которые вы можете использовать, чтобы получить список узлов в документе. Вы также можете обратиться к документу как к дереву и просканировать его (получая дочерний узел, все узлы одного уровня и т. д.).

В любом случае, результатом поиска станет объект узла MSXML, IXMLDOMNode. Узел должен существовать где-то в документе, иначе поиск закончится неудачей. Моё приложение использует его как родителя для совершенно нового узла, который создаётся объектом XML-документа:

Если парсеру удалось создать новый узел, следующий шаг — разместить его в дереве XML. Метод IXMLDOMNode::appendChild() — как раз то, что нам нужно.

Если родительский узел принял только что созданный узел в качестве дочернего, он вернёт вам ещё один экземпляр IXMLDOMNode, который представляет новый узел. На самом деле, этот новый узел и узел, который вы передали в appendChild(), в точности совпадают. Тем не менее, проверка указателя на добавленный дочерний узел может быть полезной, так как в случае ошибки он примет значение NULL.

Итак, мы уже нашли требуемый узел и добавили к нему дочерний узел; теперь посмотрим, как работать с атрибутами. Представьте себе, что вам нужно добавить к новому дочернему узлу атрибут:

Сделать это не сложно, но вам придётся переключиться с IXMLDOMNode на IXMLDOMElement, чтобы поработать с узлом как с элементом. На практике это означает, что вам придётся запросить у интерфейса IXMLDOMNode связанный с ним интерфейс IXMLDOMElement, а потом, получив его, вызвать IXMLDOMElement::setAttribute():

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

Для извлечение данных предназначен метод IXMLDOMNode::get_nodeTypedValue(). Данные, которые содержит узел, можно задавать с использованием схемы типов фирмы Microsoft, поэтому вы без труда можете сохранять числа с плавающей точкой, целые числа, строки или любые другие поддерживаемые схемой данные. Тип данных задаётся с использованием атрибута dt:type, например:

Если некоторый узел содержит данные заданного типа, вы сможете извлечь их в нужном формате, используя get_nodeTypedValue(). Если тип не задан, по умолчанию он считается текстовым, и парсер вернёт вам VARIANT с содержащимся в нём BSTR. В нашем случае этого достаточно, поскольку узел, который мы ищем, является текстовым и действительно содержит строку. Если нужно, мы всегда сможем отконвертировать её в другое представление, используя средства типа atoi(). А пока просто извлечём строку и отобразим её.

Если нам удалось извлечь значение, связанное с узлом, и если оно оказалось именно того типа, который мы ожидаем (BSTR), мы выводим текст на экран. В противном случае просто выводится сообщение об ошибке. Но вы, в зависимости от ситуации, можете предпринять и другие действия.

Наша последняя задача — сохранить обновлённое XML-дерево на диск, что мы и делаем, используя IXMLDOMDocument::save():

Сохранив документ, программа выдаёт на экран короткое сообщение и завершается.


Эта демонстрационная программа вряд ли поразит ваше воображение. Вы могли бы сделать ещё очень много, но я надеюсь, что этот простой пример показал вам, как использовать MSXML в программах на языке C++. Сам по себе парсер — сложный продукт, и я настоятельно рекомендую вам использовать MSDN как справочное руководство по нему. Парсер предоставляет множество интерфейсов, каждый из которых обычно содержит большое количество методов. Несмотря на это, я широко использую парсер в своих проектах и теперь, поработав и поэкспериментировав с ним, нахожу его простым и удобным в использовании. Я надеюсь, что и вы найдёте ему, а также XML в целом, множество применений.

XML парсер

Все современные браузеры имеют встроенный XML парсер.

Этот XML парсер преобразует XML документ в объект XML DOM, которым затем можно манипулировать при помощи JavaScript.

Объект XMLHttpRequest

Объект XMLHttpRequest позволяет обмениваться данными в фоновом режиме.

Это настоящая сбывшаяся мечта разработчика, потому что вы можете:

  • Обновлять содержимое веб-страницы не перезагружая веб-страницу
  • Запрашивать данные с сервера, когда веб-страница уже загружена
  • Получать данные с сервера, когда веб-страница уже загружена
  • Посылать данные на сервер в фоновом режиме

Создание объекта XMLHttpRequest

Все современные браузеры (IE7+, Firefox, Chrome, Safari, Opera) уже имеют встроенный объект XMLHttpRequest.

Объект XMLHttpRequest создается следующим образом:

Старые версии браузера Internet Explorer (IE5 и IE6) используют объект ActiveXObject:

Работа с объектом XMLHttpRequest

Типичный синтаксис JavaScript для работы с объектом XMLHttpRequest выглядит следующим образом:

В строке var xhttp = new XMLHttpRequest(); создается объект XMLHttpRequest.

В строке xhttp.onreadystatechange = function() свойство onreadystatechange определяет функцию, которая будет выполняться каждый раз, когда статус объекта XMLHttpRequest изменится.

Строка if (this.readyState == 4 && this.status == 200). Когда свойство readyState равно 4, и свойство status равно 200, ответ готов.

Свойство responseText возвращает ответ сервера в виде текстовой строки.

Эта текстовая строка может использоваться для изменения кода веб-страницы. Строка document.getElementBy >

Парсинг XML документа

Следующий фрагмент кода парсит XML документ в объект XML DOM:

Парсинг XML строки

Следующий фрагмент кода парсит XML строку в объект XML DOM:

Замечение: Браузер Internet Explorer использует метод loadXML() для парсинга XML строки, в то время, как остальные браузеры используют объект DOMParser.

Доступ к данным на других доменах

Из-за соображения безопасности современные браузеры не допускают возможности обращаться к данным на других доменах.

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

Xml Reader. Create Метод

Определение

Создает новый экземпляр XmlReader. Creates a new XmlReader instance.

Перегрузки

Создает новый экземпляр XmlReader с помощью указанного URI, параметров и сведений о контексте для анализа. Creates a new XmlReader instance by using the specified URI, settings, and context information for parsing.

Создает новый экземпляр XmlReader с использованием указанного средства чтения текста, параметров и сведений о контексте для анализа. Creates a new XmlReader instance by using the specified text reader, settings, and context information for parsing.

Создает новый экземпляр XmlReader, используя заданный поток, параметры и контекстную информацию для анализа. Creates a new XmlReader instance using the specified stream, settings, and context information for parsing.

Создает новый экземпляр XmlReader с использованием указанного потока, базового URI и параметров. Creates a new XmlReader instance using the specified stream, base URI, and settings.

Создает новый экземпляр XmlReader, используя заданное средство чтения XML и параметры. Creates a new XmlReader instance by using the specified XML reader and settings.

Создает экземпляр XmlReader с использованием указанного средства чтения текста, параметров и базового кода URI. Creates a new XmlReader instance by using the specified text reader, settings, and base URI.

Создает новый экземпляр XmlReader с использованием указанного модуля чтения текста и параметров. Creates a new XmlReader instance by using the specified text reader and settings.

Создает экземпляр XmlReader с указанными потоком и параметрами. Creates a new XmlReader instance with the specified stream and settings.

Создает новый экземпляр XmlReader с указанным URI. Creates a new XmlReader instance with specified URI.

Создает экземпляр XmlReader с использованием указанного средства чтения текста. Creates a new XmlReader instance by using the specified text reader.

Создает новый экземпляр XmlReader, используя заданный поток с параметрами по умолчанию. Creates a new XmlReader instance using the specified stream with default settings.

Создает новый экземпляр XmlReader с использованием указанного URI и параметров. Creates a new XmlReader instance by using the specified URI and settings.

Примеры

В этом примере создается модуль чтения XML, который удаляет незначащие пробелы, пробельные комментарии и выполняет проверку соответствия на уровне фрагментов. This example creates an XML reader that strips insignificant white space, strips comments, and performs fragment-level conformance checking.

В следующем примере для доступа XmlUrlResolver к файлу используется с учетными данными по умолчанию. The following example uses an XmlUrlResolver with default credentials to access a file.

Следующий код создает оболочку для экземпляра модуля чтения в другом модуле чтения. The following code wraps a reader instance within another reader.

В этом примере читатели привязывает средства чтения для добавления проверки DTD и схемы XML. This example chains readers to add DTD and XML schema validation.

Комментарии

Большинство перегрузок settings включает параметр, который принимает XmlReaderSettings объект. Create Most of the Create overloads include a settings parameter that accepts an XmlReaderSettings object. Этот объект можно использовать для следующих действий: You can use this object to:

Укажите, какие функции должны поддерживаться для XmlReader объекта. Specify which features you want supported on the XmlReader object.

Повторно используйте XmlReaderSettings объект для создания нескольких модулей чтения. Reuse the XmlReaderSettings object to create multiple readers. Можно использовать те же настройки для создания нескольких объектов средства чтения с одинаковой функциональностью. You can use the same settings to create multiple readers with the same functionality. Также можно изменить параметры XmlReaderSettings экземпляра и создать новый модуль чтения с другим набором компонентов. Or, you can modify the settings on an XmlReaderSettings instance and create a new reader with a different set of features.

Добавление компонентов к существующему модулю чтения XML. Add features to an existing XML reader. Метод Create может принимать другой объект XmlReader. The Create method can accept another XmlReader object. Базовым XmlReader объектом может быть определяемый пользователем модуль чтения XmlTextReader , объект или другой XmlReader экземпляр, к которому необходимо добавить дополнительные функции. The underlying XmlReader object can be a user-defined reader, a XmlTextReader object, or another XmlReader instance that you want to add additional features to.

Воспользуйтесь всеми преимуществами таких функций, как улучшенная проверка соответствия и соответствие рекомендациям для XML 1,0 (четвертого выпуска) , которые доступны только XmlReader для объектов, созданных статическим Create методом. Take full advantage of features such as better conformance checking and compliance to the XML 1.0 (fourth edition) recommendation that are available only on XmlReader objects created by the static Create method.

Хотя .NET Framework включает XmlReader конкретные реализации класса, такие XmlTextReaderкак, XmlNodeReaderи XmlValidatingReader Create классы, рекомендуется создавать XmlReader экземпляры с помощью Method. Although the .NET Framework includes concrete implementations of the XmlReader class, such as the XmlTextReader, XmlNodeReader, and the XmlValidatingReader classes, we recommend that you create XmlReader instances by using the Create method.

Параметры по умолчанию Default settings

При использовании Create перегрузки, которая не XmlReaderSettings принимает объект, используются следующие параметры модуля чтения по умолчанию: If you use a Create overload that doesn’t accept a XmlReaderSettings object, the following default reader settings are used:

Параметр Setting Значение по умолчанию Default
CheckCharacters true
ConformanceLevel ConformanceLevel.Document
IgnoreComments false
IgnoreProcessingInstructions false
IgnoreWhitespace false
LineNumberOffset 0 0
LinePositionOffset 0 0
NameTable null
DtdProcessing Prohibit
Schemas Пустой объект XmlSchemaSet An empty XmlSchemaSet object
ValidationFlags ProcessIdentityConstraintsдоступной ProcessIdentityConstraints enabled
ValidationType None
XmlResolver Новый объект XmlUrlResolver. A new XmlUrlResolver object. Начиная с .NET Framework 4.5.2, этот параметр имеет значение null по умолчанию. Starting with the .NET Framework 4.5.2, this setting has a default value of null .

Параметры для распространенных сценариев Settings for common scenarios

Ниже приведены XmlReaderSettings свойства, которые следует задать для некоторых типовых сценариев средства чтения XML. Here are the XmlReaderSettings properties you should set for some of the typical XML reader scenarios.

Требование Requirement Задать Set
Данные должны представлять собой XML-документ правильного формата. Data must be a well-formed XML document. ConformanceLevelв Document. ConformanceLevel to Document.
Данные должны быть правильно сформированными XML-проанализированными сущностями. Data must be a well-formed XML parsed entity. ConformanceLevelв Fragment. ConformanceLevel to Fragment.
Данные должны быть проверены по DTD. Data must be validated against a DTD. DtdProcessing — Parse DtdProcessing to Parse
ValidationTypeв DTD. ValidationType to DTD.
Данные должны быть проверены по схеме XML. Data must be validated against an XML schema. ValidationType — Schema ValidationType to Schema
Schemasзначение, XmlSchemaSet используемое для проверки. Schemas to the XmlSchemaSet to use for validation. Обратите XmlReader внимание, что не поддерживает проверку схемы XML-Data reduceed (XDR). Note that XmlReader doesn’t support XML-Data Reduced (XDR) schema validation.
Данные должны быть проверены по встроенной схеме XML. Data must be validated against an inline XML schema. ValidationType — Schema ValidationType to Schema
ValidationFlagsв ProcessInlineSchema. ValidationFlags to ProcessInlineSchema.
Поддержка типов. Type support. ValidationType — Schema ValidationType to Schema
SchemasXmlSchemaSet для использования. Schemas to the XmlSchemaSet to use.

XmlReaderне поддерживает проверку схемы XML-Data Reduceed (XDR). XmlReader doesn’t support XML-Data Reduced (XDR) schema validation.

Асинхронное программирование Asynchronous programming

В синхронном режиме Create метод считывает первый фрагмент данных из буфера средства чтения файла, потока или текстового читателя. In synchronous mode, the Create method reads the first chunk of data from the buffer of the file, stream, or text reader. Это может вызвать исключение в случае сбоя операции ввода-вывода. This may throw an exception if an I/O operation fails. В асинхронном режиме первая операция ввода-вывода выполняется с операцией чтения, поэтому возникающие исключения будут выдаваться при выполнении операции чтения. In asynchronous mode, the first I/O operation occurs with a read operation, so exceptions that arise will be thrown when the read operation occurs.

Замечания по безопасности Security considerations

По умолчанию XmlReader компонент XmlUrlResolver использует объект без учетных данных пользователя для открытия ресурсов. By default, the XmlReader uses an XmlUrlResolver object with no user credentials to open resources. Это означает, что по умолчанию модуль чтения XML может получить доступ к любому расположению, которое не требует учетных данных. This means that, by default, the XML reader can access any location that doesn’t require credentials. XmlResolver Используйте свойство для управления доступом к ресурсам: Use the XmlResolver property to control access to resources:

  • Задайте XmlResolverобъект,чтобы ограничитьресурсы,ккоторымможетобращатьсямодульчтенияXML.XmlSecureResolver Set XmlResolver to an XmlSecureResolver object to restrict the resources that the XML reader can access.
  • Задайте значение XmlResolver,чтобы модуль чтения XML не открывал какие-либо внешние ресурсы. null Set XmlResolver to null to prevent the XML reader from opening any external resources.

Create(String, XmlReaderSettings, XmlParserContext)

Создает новый экземпляр XmlReader с помощью указанного URI, параметров и сведений о контексте для анализа. Creates a new XmlReader instance by using the specified URI, settings, and context information for parsing.

Параметры

URI файла с XML-данными. The URI for the file containing the XML data. Объект XmlResolver в объекте XmlReaderSettings используется для преобразования пути в каноническое представление данных. The XmlResolver object on the XmlReaderSettings object is used to convert the path to a canonical data representation. Если XmlResolver равно null , используется новый объект XmlUrlResolver. If XmlResolver is null , a new XmlUrlResolver object is used.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance. Это значение может быть равно null . This value can be null .

Для синтаксического анализа фрагмента XML необходимы контекстные сведения. The context information required to parse the XML fragment. Контекстные сведения могут содержать используемый класс XmlNameTable, кодировку, область пространства имен, текущие области xml:lang и xml:space , базовый код URI и определение типа документа. The context information can include the XmlNameTable to use, encoding, namespace scope, the current xml:lang and xml:space scope, base URI, and document type definition.

Это значение может быть равно null . This value can be null .

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения


Значение inputUri равно null . The inputUri value is null .

Тип XmlReader не имеет достаточных разрешений для доступа к расположению XML-данных. The XmlReader does not have sufficient permissions to access the location of the XML data.

Значения присвоены как свойству NameTable, так и свойству NameTable. The NameTable and NameTable properties both contain values. (Только для одного из этих свойств NameTable можно задать значение и использовать это свойство). (Only one of these NameTable properties can be set and used).

Не удается найти файл, заданный с помощью URI. The file specified by the URI cannot be found.

Неправильный формат URI. The URI format is not correct.

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Это означает, что XmlReader может получить доступ к любым расположениям, для которых не требуется проверка подлинности. This means that the XmlReader can access any locations that does not require authentication. Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Можно ограничить ресурсы, к которым XmlReader может получить доступ, XmlResolver присвоив свойству XmlSecureResolver объект. You can restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(TextReader, XmlReaderSettings, XmlParserContext)

Создает новый экземпляр XmlReader с использованием указанного средства чтения текста, параметров и сведений о контексте для анализа. Creates a new XmlReader instance by using the specified text reader, settings, and context information for parsing.

Параметры

Средство считывания текста, из которого следует считывать данные XML. The text reader from which to read the XML data. Средство считывания текста возвращает поток символов Юникода, и указанная в объявлении XML кодировка не используется средством считывания XML для раскодирования потока данных. A text reader returns a stream of Unicode characters, so the encoding specified in the XML declaration isn’t used by the XML reader to decode the data stream.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance. Это значение может быть равно null . This value can be null .

Для синтаксического анализа фрагмента XML необходимы контекстные сведения. The context information required to parse the XML fragment. Контекстные сведения могут содержать используемый класс XmlNameTable, кодировку, область пространства имен, текущие области xml:lang и xml:space , базовый код URI и определение типа документа. The context information can include the XmlNameTable to use, encoding, namespace scope, the current xml:lang and xml:space scope, base URI, and document type definition.

Это значение может быть равно null . This value can be null .

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Значения присвоены как свойству NameTable, так и свойству NameTable. The NameTable and NameTable properties both contain values. (Только для одного из этих свойств NameTable можно задать значение и использовать это свойство). (Only one of these NameTable properties can be set and used).

Примеры

В следующем примере создается XmlReader объект, который считывает фрагмент XML. The following example creates an XmlReader object that reads an XML fragment.

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Для управления доступом к ресурсам XmlReader можно использовать один из следующих методов. You can use one of the following methods to control which resources the XmlReader can access:

  • Ограничить ресурсы, к которым имеет доступ XmlReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver. Restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.
  • Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение null . Do not allow the XmlReader to open any external resources by setting the XmlResolver property to null .

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(Stream, XmlReaderSettings, XmlParserContext)

Создает новый экземпляр XmlReader, используя заданный поток, параметры и контекстную информацию для анализа. Creates a new XmlReader instance using the specified stream, settings, and context information for parsing.

Параметры

Поток, содержащий XML-данные. The stream that contains the XML data.

XmlReader просматривает первые байты потока в поисках метки порядка следования байтов или другого признака кодировки. The XmlReader scans the first bytes of the stream looking for a byte order mark or other sign of encoding. Эта кодировка после определения используется в последующем считывании потока, а процедура обработки продолжает анализировать входные данные как поток символов Юникода. When encoding is determined, the encoding is used to continue reading the stream, and processing continues parsing the input as a stream of (Unicode) characters.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance. Это значение может быть равно null . This value can be null .

Для синтаксического анализа фрагмента XML необходимы контекстные сведения. The context information required to parse the XML fragment. Контекстные сведения могут содержать используемый класс XmlNameTable, кодировку, область пространства имен, текущие области xml:lang и xml:space , базовый код URI и определение типа документа. The context information can include the XmlNameTable to use, encoding, namespace scope, the current xml:lang and xml:space scope, base URI, and document type definition.

Это значение может быть равно null . This value can be null .

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Для управления доступом к ресурсам XmlReader можно использовать один из следующих методов. You can use one of the following methods to control which resources the XmlReader can access:

  • Ограничить ресурсы, к которым имеет доступ XmlReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver. Restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.
  • Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение null . Do not allow the XmlReader to open any external resources by setting the XmlResolver property to null .

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(Stream, XmlReaderSettings, String)

Создает новый экземпляр XmlReader с использованием указанного потока, базового URI и параметров. Creates a new XmlReader instance using the specified stream, base URI, and settings.

Параметры

Поток, содержащий XML-данные. The stream that contains the XML data.

XmlReader просматривает первые байты потока в поисках метки порядка следования байтов или другого признака кодировки. The XmlReader scans the first bytes of the stream looking for a byte order mark or other sign of encoding. Эта кодировка после определения используется в последующем считывании потока, а процедура обработки продолжает анализировать входные данные как поток символов Юникода. When encoding is determined, the encoding is used to continue reading the stream, and processing continues parsing the input as a stream of (Unicode) characters.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance. Это значение может быть равно null . This value can be null .

Базовый URI считываемой сущности или документа. The base URI for the entity or document being read. Это значение может быть равно null . This value can be null .

Примечание по безопасности. Базовый универсальный код ресурса (URI) используется для разрешения относительного URI XML-документа. Security Note The base URI is used to resolve the relative URI of the XML document. Не используйте базовый URI из непроверенного источника. Do not use a base URI from an untrusted source.

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Для управления доступом к ресурсам XmlReader можно использовать один из следующих методов. You can use one of the following methods to control which resources the XmlReader can access:

  • Ограничить ресурсы, к которым имеет доступ XmlReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver. Restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.
  • Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение null . Do not allow the XmlReader to open any external resources by setting the XmlResolver property to null .

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(XmlReader, XmlReaderSettings)

Создает новый экземпляр XmlReader, используя заданное средство чтения XML и параметры. Creates a new XmlReader instance by using the specified XML reader and settings.


Параметры

Объект, который следует использовать в качестве базового средства чтения XML. The object that you want to use as the underlying XML reader.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance.

Уровень согласованности объекта XmlReaderSettings должен быть равным уровню согласованности базового средства чтения или иметь значение Auto. The conformance level of the XmlReaderSettings object must either match the conformance level of the underlying reader, or it must be set to Auto.

Возвраты

Объект, являющийся оболочкой для объекта XmlReader. An object that is wrapped around the specified XmlReader object.

Исключения

Значение reader равно null . The reader value is null .

Если объект XmlReaderSettings задает уровень согласованности, который не соответствует уровню согласованности базового средства чтения. If the XmlReaderSettings object specifies a conformance level that is not consistent with conformance level of the underlying reader.

-или- -or- Базовый XmlReader находится в состоянии Error или Closed. The underlying XmlReader is in an Error or Closed state.

Примеры

В следующем примере создается проверяющий XmlReader объект, заключенный XmlNodeReader вокруг объекта. The following example creates a validating XmlReader object that is wrapped around an XmlNodeReader object.

Комментарии

Этот метод позволяет добавлять дополнительные функции к базовому XmlReader объекту. This method allows you add additional features to an underlying XmlReader object. Базовый XmlReader объект может быть другим XmlReader объектом, созданным Create методом, или XmlReader объектом, созданным с помощью одной из конкретных XmlReader реализаций. The underlying XmlReader object can be another XmlReader object created by the Create method, or an XmlReader object created using one of the concrete XmlReader implementations.

Для доступа XmlUrlResolver ко всем внешним ресурсам, таким как схема, используется значение по умолчанию без учетных данных. A default XmlUrlResolver with no credentials is used to access any external resources such as a schema.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlResolver , укажите с помощью этого XmlReaderSettings.XmlResolver свойства необходимые учетные данные. If the external resource is located on a network resource that requires authentication, specify an XmlResolver with the necessary credentials using the XmlReaderSettings.XmlResolver property.

Для управления доступом к ресурсам XmlReader можно использовать один из следующих методов. You can use one of the following methods to control which resources the XmlReader can access:

  • Ограничить ресурсы, к которым имеет доступ XmlReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver. Restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.
  • Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение null . Do not allow the XmlReader to open any external resources by setting the XmlResolver property to null .

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(TextReader, XmlReaderSettings, String)

Создает экземпляр XmlReader с использованием указанного средства чтения текста, параметров и базового кода URI. Creates a new XmlReader instance by using the specified text reader, settings, and base URI.

Параметры

Средство считывания текста, из которого следует считывать данные XML. The text reader from which to read the XML data. Средство считывания текста возвращает поток символов Юникода, и указанная в объявлении XML кодировка не используется XmlReader для декодирования потока данных. A text reader returns a stream of Unicode characters, so the encoding specified in the XML declaration isn’t used by the XmlReader to decode the data stream.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance. Это значение может быть равно null . This value can be null .

Базовый URI считываемой сущности или документа. The base URI for the entity or document being read. Это значение может быть равно null . This value can be null .

Примечание по безопасности. Базовый универсальный код ресурса (URI) используется для разрешения относительного URI XML-документа. Security Note The base URI is used to resolve the relative URI of the XML document. Не используйте базовый URI из непроверенного источника. Do not use a base URI from an untrusted source.

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Для управления доступом к ресурсам XmlReader можно использовать один из следующих методов. You can use one of the following methods to control which resources the XmlReader can access:

  • Ограничить ресурсы, к которым имеет доступ XmlReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver. Restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.
  • Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение null . Do not allow the XmlReader to open any external resources by setting the XmlResolver property to null .

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(TextReader, XmlReaderSettings)

Создает новый экземпляр XmlReader с использованием указанного модуля чтения текста и параметров. Creates a new XmlReader instance by using the specified text reader and settings.

Параметры

Средство считывания текста, из которого следует считывать данные XML. The text reader from which to read the XML data. Средство считывания текста возвращает поток символов Юникода, и указанная в объявлении XML кодировка не используется средством считывания XML для раскодирования потока данных. A text reader returns a stream of Unicode characters, so the encoding specified in the XML declaration isn’t used by the XML reader to decode the data stream.

Параметры для нового XmlReader. The settings for the new XmlReader. Это значение может быть равно null . This value can be null .

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Для управления доступом к ресурсам XmlReader можно использовать один из следующих методов. You can use one of the following methods to control which resources the XmlReader can access:

  • Ограничить ресурсы, к которым имеет доступ XmlReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver. Restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.
  • Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение null . Do not allow the XmlReader to open any external resources by setting the XmlResolver property to null .

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(Stream, XmlReaderSettings)

Создает экземпляр XmlReader с указанными потоком и параметрами. Creates a new XmlReader instance with the specified stream and settings.

Параметры

Поток, содержащий XML-данные. The stream that contains the XML data.

XmlReader просматривает первые байты потока в поисках метки порядка следования байтов или другого признака кодировки. The XmlReader scans the first bytes of the stream looking for a byte order mark or other sign of encoding. Эта кодировка после определения используется в последующем считывании потока, а процедура обработки продолжает анализировать входные данные как поток символов Юникода. When encoding is determined, the encoding is used to continue reading the stream, and processing continues parsing the input as a stream of (Unicode) characters.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance. Это значение может быть равно null . This value can be null .

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Для управления доступом к ресурсам XmlReader можно использовать один из следующих методов. You can use one of the following methods to control which resources the XmlReader can access:

  • Ограничить ресурсы, к которым имеет доступ XmlReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver. Restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.
  • Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение null . Do not allow the XmlReader to open any external resources by setting the XmlResolver property to null .


Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(String)

Создает новый экземпляр XmlReader с указанным URI. Creates a new XmlReader instance with specified URI.

Параметры

URI файла с XML-данными. The URI for the file that contains the XML data. Класс XmlUrlResolver используется для преобразования пути к классическому представлению данных. The XmlUrlResolver class is used to convert the path to a canonical data representation.

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение inputUri равно null . The inputUri value is null .

Тип XmlReader не имеет достаточных разрешений для доступа к расположению XML-данных. The XmlReader does not have sufficient permissions to access the location of the XML data.

Файл, указанный в URI, не существует. The file identified by the URI does not exist.

Неправильный формат URI. The URI format is not correct.

Примеры

В следующем примере создается XmlReader объект, который считывает файл данных XML, заданный с помощью URI. The following example creates an XmlReader object that reads XML data file specified by the URI.

Комментарии

Для создания модуля чтения используется объектспараметрамипоумолчанию.XmlReaderSettings An XmlReaderSettings object with default settings is used to create the reader. Если вы хотите указать функции для поддержки в созданном модуле чтения, используйте перегрузку, которая принимает XmlReaderSettings объект в качестве одного из своих аргументов и передает XmlReaderSettings объект с правильными параметрами. If you wish to specify the features to support on the created reader, use the overload that takes an XmlReaderSettings object as one of its arguments, and pass in an XmlReaderSettings object with the correct settings.

Значение по XmlUrlResolver умолчанию без учетных данных используется для доступа ко всем внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д. A default XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlResolver , укажите с помощью этого XmlReaderSettings.XmlResolver свойства необходимые учетные данные. If the external resource is located on a network resource that requires authentication, specify an XmlResolver with the necessary credentials using the XmlReaderSettings.XmlResolver property.

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(TextReader)

Создает экземпляр XmlReader с использованием указанного средства чтения текста. Creates a new XmlReader instance by using the specified text reader.

Параметры

Средство считывания текста, из которого следует считывать данные XML. The text reader from which to read the XML data. Средство считывания текста возвращает поток символов Юникода, и указанная в объявлении XML кодировка не используется средством считывания XML для раскодирования потока данных. A text reader returns a stream of Unicode characters, so the encoding specified in the XML declaration is not used by the XML reader to decode the data stream.

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Примеры

В следующем примере StringReader класс используется для чтения XML-строки. The following example uses the StringReader class to read an XML string.

Комментарии

Для создания модуля чтения используется объектспараметрамипоумолчанию.XmlReaderSettings An XmlReaderSettings object with default settings is used to create the reader. Если вы хотите указать функции для поддержки в созданном модуле чтения, используйте перегрузку, которая принимает XmlReaderSettings объект в качестве одного из своих аргументов и передает XmlReaderSettings объект с правильными параметрами. If you wish to specify the features to support on the created reader, use the overload that takes an XmlReaderSettings object as one of its arguments, and pass in an XmlReaderSettings object with the correct settings.

Значение по XmlUrlResolver умолчанию без учетных данных используется для доступа ко всем внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д. A default XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlResolver , укажите с помощью этого XmlReaderSettings.XmlResolver свойства необходимые учетные данные. If the external resource is located on a network resource that requires authentication, specify an XmlResolver with the necessary credentials using the XmlReaderSettings.XmlResolver property.

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(Stream)

Создает новый экземпляр XmlReader, используя заданный поток с параметрами по умолчанию. Creates a new XmlReader instance using the specified stream with default settings.

Параметры

Поток, содержащий XML-данные. The stream that contains the XML data.

XmlReader просматривает первые байты потока в поисках метки порядка следования байтов или другого признака кодировки. The XmlReader scans the first bytes of the stream looking for a byte order mark or other sign of encoding. Эта кодировка после определения используется в последующем считывании потока, а процедура обработки продолжает анализировать входные данные как поток символов Юникода. When encoding is determined, the encoding is used to continue reading the stream, and processing continues parsing the input as a stream of (Unicode) characters.

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение input равно null . The input value is null .

Тип XmlReader не имеет достаточных разрешений для доступа к расположению XML-данных. The XmlReader does not have sufficient permissions to access the location of the XML data.

Примеры

В следующем примере создается XmlReader объект, считывающий FileStreamиз. The following example creates an XmlReader object that reads from a FileStream.

Комментарии

Для создания модуля чтения используется объектспараметрамипоумолчанию.XmlReaderSettings An XmlReaderSettings object with default settings is used to create the reader. Если вы хотите указать функции для поддержки в созданном модуле чтения, используйте перегрузку, которая принимает XmlReaderSettings объект в качестве одного из своих аргументов и передает XmlReaderSettings объект с правильными параметрами. If you wish to specify the features to support on the created reader, use the overload that takes an XmlReaderSettings object as one of its arguments, and pass in an XmlReaderSettings object with the correct settings.

Значение по XmlUrlResolver умолчанию без учетных данных используется для доступа ко всем внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д. A default XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlResolver , укажите с помощью этого XmlReaderSettings.XmlResolver свойства необходимые учетные данные. If the external resource is located on a network resource that requires authentication, specify an XmlResolver with the necessary credentials using the XmlReaderSettings.XmlResolver property.

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Create(String, XmlReaderSettings)

Создает новый экземпляр XmlReader с использованием указанного URI и параметров. Creates a new XmlReader instance by using the specified URI and settings.

Параметры

URI файла с XML-данными. The URI for the file containing the XML data. Объект XmlResolver в объекте XmlReaderSettings используется для преобразования пути в каноническое представление данных. The XmlResolver object on the XmlReaderSettings object is used to convert the path to a canonical data representation. Если XmlResolver равно null , используется новый объект XmlUrlResolver. If XmlResolver is null , a new XmlUrlResolver object is used.

Параметры нового экземпляра XmlReader. The settings for the new XmlReader instance. Это значение может быть равно null . This value can be null .

Возвраты

Объект, используемый для чтения данных XML в потоке. An object that is used to read the XML data in the stream.

Исключения

Значение inputUri равно null . The inputUri value is null .

Не удается найти файл, заданный с помощью URI. The file specified by the URI cannot be found.

Неправильный формат URI. The URI format is not correct.

Примеры

В следующем примере создается XmlReader объект, поддерживающий проверку определения типа документа (DTD). The following example creates an XmlReader object that supports document type definition (DTD) validation.

Комментарии

По умолчанию XmlUrlResolver для доступа к внешним ресурсам, таким как определение типа документа (DTD), сущности, схемы и т. д., используется значение без учетных данных. By default an XmlUrlResolver with no credentials is used to access any external resources such as a document type definition (DTD), entities, schemas, and so on.

Начиная с .NET Framework 4.5.2, значение по умолчанию XmlUrlResolver не предоставляется. Starting with the .NET Framework 4.5.2, no default XmlUrlResolver is provided. Если решение предназначено для .NET Framework 4.5.2 или более поздних версий, XmlResolver укажите XmlReaderSettings.XmlResolver свойство с помощью свойства. If your solution targets the .NET Framework 4.5.2 or later versions, specify an XmlResolver using the XmlReaderSettings.XmlResolver property.

Это означает, что XmlReader может получить доступ к любым расположениям, для которых не требуется проверка подлинности. This means that the XmlReader can access any locations that does not require authentication. Если внешний ресурс находится в сетевом ресурсе, требующем проверки подлинности XmlReaderSettings.XmlResolver , используйте свойство, XmlResolver чтобы указать необходимые учетные данные. If the external resource is located on a network resource that requires authentication, use the XmlReaderSettings.XmlResolver property to specify an XmlResolver with the necessary credentials.

Можно ограничить ресурсы, к которым XmlReader может получить доступ, XmlResolver присвоив свойству XmlSecureResolver объект. You can restrict the resources that the XmlReader can access by setting the XmlResolver property to an XmlSecureResolver object.

Созданный XmlReader объект расширяет ссылки на сущности и выполняет нормализацию XML символов новой строки. The created XmlReader object expands entity references and performs XML normalization of new line characters.

Руководство по парсингу XML Python: чтение XML-файла

Дата публикации: 2020-07-18

От автора: что такое XML? XML расшифровывается как расширяемый язык разметки. Он был разработан для хранения и передачи небольших и средних объемов данных и широко используется для обмена структурированной информацией.

Python позволяет парсировать и изменять XML-документ. Для парсинга XML-документа вам необходимо иметь в памяти весь XML-документ. В этом руководстве мы рассмотрим, как в Python использовать класс XML minidom для загрузки и парсинга XML-файла.

Как парсить XML с помощью minidom

Как создать XML-узел

Как парсить XML с помощью ElementTree


Как парсить XML с помощью minidom

Мы создали образец XML-файла, который мы собираемся парсить.

Шаг 1) Внутри файла мы видим имя, фамилию, дом и навыки (SQL, Python, Testing и Business)

Шаг 2) После того, как мы спарсим документ, мы выведем «имя узла» корня документа и «первый дочерний тэг». Tagname и nodename являются стандартными свойствами файла XML.

Импортируйте модуль xml.dom.minidom и объявите файл для парсинга (myxml.xml)

Этот файл содержит основную информацию о сотруднике, такую как имя, фамилия, адрес, навыки и т. д.

Мы используем функцию parse в minidom XML для загрузки и парсинга файла XML

У нас есть переменная doc, doc получает результат функции parse

Мы хотим вывести имя файла и дочерний тэг, поэтому объявляем это в функции print

Запустите код. Он выведет имя узла (#document) из файла XML и первый дочерний тэг (employee) из файла XML.

Примечание: Nodename и tagname являются стандартными именами или свойствами XML dom. В случае, если вы не знакомы с этим типом именования.

Шаг 3) Мы также можем вызвать список тегов XML из документа XML и вывести его. Здесь мы вывели набор навыков, таких как SQL, Python, Testing и Business.

Объявление переменной expertise, из которой мы будем извлекать всю информацию сотрудника

Используем стандартную функцию dom с именем «getElementsByTagName»

Она получит все элементы с именем skill

Объявляем цикл для каждого из тегов skill

Запустите код — он выдаст список из четырех навыков

Как создать XML-узел

Мы можем создать новый атрибут с помощью функции «createElement», а затем добавить этот новый атрибут или тег к существующим тегам XML. Мы добавили новый тег «BigData» в XML-файл.

Вам нужно написать код, чтобы добавить новый атрибут (BigData) в существующий тег XML

Затем вам нужно вывести тег XML с новыми атрибутами, добавленными к существующему тегу XML.

Чтобы добавить новый XML и вставить его в документ, мы используем код «doc.create elements»

Этот код создаст новый тег skill для нашего нового атрибута «Big-data»

Добавьте этот тег в first child документа (employee)

Запустите код — появится новый тег «big data» с другим списком навыков.

Как сделать xml parser (PHP).

Вот и лето пришло и первая неделя июля пролетела незаметно. Через две недели мне защищать свой диплом, а одна из частей его – XML parser. Но жалко, что не в пхп. Ну ниче, счас наверстаем

Я видел много xml parser`ов, но не затрагивал при этом веб-программирование. Теперь же я хочу выяснить и научиться вместе с вами, как сделать простой xml parser в php.

Не, ну на самом деле: xml-файлы – очень полезная штука. И любой профессионал должен… нет, не должен, а обязан знать, как с ними работать. Мы же хотим стать профессионалами? Если Вы на моем блоге, то такое желание у Вас есть.

Мы предполагаем, что знаем, что такое XML и описывать его здесь не будем. Ну, если не знаем, то легко узнаем здесь: http://ru.wikipedia.org/wiki/XML

При поиске способов парсинга XML на PHP, я обнаружил простой набор функций в PHP для работы с XML-файлами, который называется «XML Parser Functions». Парсинг начинается с инициализации парсера вызовом функции xml_parser_create:

Потом нам нужно сказать парсеру, какие функции будут обрабатывать попадающиеся ему xml-теги и текстовую информацию в процессе парсинга. Т.е. нужно установить некие обработчики:

xml_set_element_handler($xml_parser, “startElement”, “endElement”);

Эта функция отвечает за установку обработчиков начала элемента и конца элемента. Например, если в тексте xml-файла встретится комбинация, то функция startElement сработает, когда парсер найдет элемент, а функция endElement – при нахождении.

Сами же функции startElement и endElement принимают несколько параметров согласно документации по php:

А как же считывать данные из файла? Мы же пока не видели ни одного параметра для этого ни в одной из функций! А об этом дальше: считывание файла возлагается на плечи программиста, т.е. мы должны использовать стандартные функции для работы с файлами:

Открыли файл. А теперь нужно построчно считывать его и скармливать считываемые строки функции xml_parse:

Здесь заметим две очень важные вещи. Первая – это то, что функции xml_parse в третьем параметре нужно передать флаг считывания последней строки (true – если строка последняя, false – если нет). Второе – это то, что как и в любом деле, мы должны следить здесь за ошибками. За это отвечают функции xml_get_error_code и xml_error_string. Первая функция получает код ошибки, а вторая – по полученному коду возвращает текстовое описание ошибки. Что в результате возникновения ошибки получится – рассмотрим позже. Не менее полезная функция xml_get_current_line_number скажет нам номер текущей обрабатываемой строки в файле.

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

Вот, основные функции мы рассмотрели. Пора бы посмотреть их на деле. Для этого я придумал xml-файл с очень простой структурой:

Назовем этот файл data.xml и попытаемся его распарсить с помощью следующего кода:

function endElement($parser, $name) <
global $depth;

$depth—; // уменьшаем глубину
>

$depth = 0;
$file = «data.xml»;

if (!($fp = fopen($file, «r»))) <
die(«could not open XML input»);
>

В результате разработанного нами простейшего скрипта браузер вывел в свое окно следующую информацию:

Попробуем испортить XML-файл, заменив тег

на , а закрывающий тег оставив прежним:

XML Error: Mismatched tag at line 5

Ух ты! Сообщения об ошибках работают! Причем довольно информативные.

Эх, я забыл еще одну вещь… Мы же не вывели текст, содержащийся внутри тегов address и phone. Исправляем наш недочет – добавляем текстовый обработчик с помощью функции xml_set_character_data_handler:

И добавляем в код саму функцию-обработчик:

Посмотрим теперь на вывод:

О! Теперь вывели все!

Кстати, кто-нибудь заметил, что имена тегов и атрибутов все большими буквами написаны? Странно… они же в нашем xml-файле малыми буквами обозначены. Видимо где-то какие-то настройки установлены, чтобы делать uppercase…

Ааа, нашел! Оказывается есть еще функция xml_parser_set_option:

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);

Таким вызовом мы отменяем вывод имен атрибутов и имен тегов большими буквами:

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

nika, Вам нужно вставить вызов
xml_set_character_data_handler($xml_parser, ’stringElement’);
после
xml_set_element_handler($xml_parser, “startElement”, “endElement”);

В общем для правильного отображения нужно соблюдать следующее:
1. нужно, чтобы xml-файл был в кодировке UTF-8
2. в xml-файле первая строчка должна быть такой:

3. нужно инициализировать парсер так:
xml_parser_create(”UTF-8?);
4. нужно перед выводом содержимого xml-файла в браузер настроить последний на кодировку UTF-8:
header( “Content-Type: text/html; charset=utf-8?);

Для отображения текста на русском языке используем
iconv(”UTF-8?,”windows-1251?, $attr), где $attr, то что нужно вывести.

Есть такие два класса интересных в стандартной библеотеке PHP5 – DOMDocument() и XSLTProcesor() использовал на довольно крупных проектах – не жалуюсь =)

Вообще у PHP есть еще одна библиотечка для разбора XML по принципу SAX – называется XMLReader.

Господа, как вывести из xml с помощью simplexml не стандартные теги, например ?
Переменная вида $text = $item->yandex:full-text не работает.

Все ОК, только обратите внимание на наличие следующего параметра,

function cdata($parser, $cdata)
<
var_dump($parser, $cdata);
>

Без него не хочет парсить XML с CDATA…. размером в 1.5 метра

2Nika, Функция header() работает только в том случае, если до нее не было ничего выведено, то бишь первым действие производили ее, т.к. мы отсылаем заголовки на эту страницу, которые говорят нам, что текст нужно переводить в кодировку UTF-8. Судя по вашей ошибке у вас есть пропуски строк, поэтому сделайте вот так:

Значение == порядковый номер строки

Также почитайте:

Комментарии к посту «Как сделать xml parser (PHP).»

Комментариев пока нет, будьте первым.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

PHP и XML

XML — это сокращение от extensible Markup Language (расширяемый язык разметки). Язык XML — подмножество гораздо более сложного языка SGML (Standard Generalized Markup Language — стандартный обобщенный язык разметки), но для использования XML не требуется что-либо знать о языке SGML. Язык XML определяет синтаксис создания структурированных документов, доступных для чтения людьми и компьютерами.

Язык XML позволяет создавать независимые от приложения форматы обмена данными. Такая возможность становится предпосылкой появления в будущем все более эффективных и простых методов разработки программ для веб.

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

Например, пара согласованных дескрипторов

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


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

Вполне очевидно, что в коде XML имеются разнообразные дескрипторы и атрибуты, а также просматривается такая же иерархическая структура, как и в коде HTML. В языке XML каждая пара дескрипторов называется элементом.

При формировании документа XML необходимо учитывать описанные ниже минимальные требования к его структуре:

  • В документе должен быть предусмотрен лишь единственный корневой элемент, который включает все другие элементы, подобно элементу в документах HTML. Иногда корневой элемент называют также элементом документа.
  • Структура вложения элементов должна быть иерархической. Это означает, что структура документа с дескрипторами является допустимой, а структура — нет. В первом примере очевидно, что элемент полностью включает элемент , а во втором примере элементы и перекрываются. Язык XML не допускает, чтобы дескрипторы включаемого элемента выходили за пределы дескрипторов включающего элемента (т.е. перекрывались).
  • Все элементы должны иметь закрывающий дескриптор (в этом состоит отличие XML от HTML, в котором допускается применение некоторых незакрытых элементов). Задача закрытия элемента может быть решена с использованием закрывающего дескриптора (например, ), как в языке HTML, или средства XML не требующим закрывающего дескриптора (например, ).
  • Элементы могут содержать другие элементы, текст и прочие данные. Если элемент включает фрагменты текста, напоминающие код XML (допустим, ), но не являются таковыми, или требуется исключить синтаксический анализ какого-то символа в тексте, то этот символ должен быть обозначен символами переключения на другой режим обработки.

Кроме перечисленных выше обязательных требований, которые относятся к категории так называемых требований по обеспечению формальной правильности, стандарт XML указывает также, что документы XML должны начинаться с идентификационного объявления XML. Это объявление представляет собой инструкцию по обработке, в которой указаны тип MIME и номер версии, как в примере . Это объявление не обязательное, но некоторые синтаксические анализаторы, не обнаружив его, выводят сообщение об ошибке. Кроме того, код XML чувствителен к регистру, а в некоторых версиях XML, таких как XHTML, требуется, чтобы имена дескрипторов и атрибутов состояли из строчных букв. В самом стандарте XML нет абсолютно никаких указаний в отношении дескрипторов с именами, состоящими из строчных букв, но всегда рекомендуется использовать дескрипторы и атрибуты, заданные в нижнем регистре, если нет весомых оснований для использования букв другого регистра.

Практическое применение языка XML

Выше были описаны основные преимущества языка XML, а в данном разделе рассматриваются основные области применения XML. Эта тема — довольно сложная. С точки зрения теории язык XML используется в трех направлениях: манипулирование данными и хранение данных; передача данных из одного программного приложения в другое; отображение страниц XML в браузере или в другом приложении с помощью директив вывода на дисплей, заданных в виде таблиц стилей.

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

Поэтому в настоящее время остается наиболее перспективным такое основное направление применения языка XML, как обмен данными между приложениями и организациями. Как оказалось, именно в этой области язык PHP может оказать самое непосредственное содействие. Например, с помощью программы C могут быть выполнены некоторые операции с данными, полученными из базы данных, затем осуществлен вывод результатов в коде XML, который может быть преобразован с помощью языка PHP в код HTML для отображения в браузере или другом приложении.

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

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

Сравнение API-интерфейсов SAX и DOM

Для обработки кода XML и документов XML чаще всего применяются три основных типа API-интерфейсов: SimpleXML, объектная модель документа (Document Object Model — DOM) и простой API-интерфейс для XML (Simple API for XML — SAX). Все три этих модуля теперь включены во все дистрибутивы PHP.

Для синтаксического анализа и модификации любого документа XML можно использовать любой из трех API-интерфейсов — DOM, SAX или SimpleXML. А для создания или дополнения документа XML исключительно с помощью интерфейса PHP (иными словами, без написания каких-либо фрагментов документа XML вручную) необходимо использовать DOM. Каждый из API-интерфейсов имеет свои преимущества и недостатки, которые описаны ниже:

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

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

Расширение DOM, предусмотренное в языке PHP, позволяет считывать файл XML и создавать в памяти дерево объектов, допускающее обход. Это дает возможность начать обработку с самого документа или с любого элемента документа (элементы в терминологии DOM именуются узлами), после чего получать или задавать значения дочерних и родительских узлов, а также текстовое информационное наполнение в каждой части дерева.

Объекты DOM можно сохранять в контейнерах, а также выводить их в виде текста. API-интерфейс DOM языка XML обеспечивает наилучшие результаты, если доступен весь документ XML. А если код XML поступает очень медленно в виде потока или требуется обработать много разных фрагментов XML как разделы одного и того же документа, то целесообразно использовать API-интерфейс SAX. Кроме того, в расширении DOM предусматривается формирование дерева в памяти, поэтому для обработки больших документов могут потребоваться значительные ресурсы.

SimpleXML

API-интерфейс SimpleXML позволяет быстро открыть файл XML, преобразовать некоторые из обнаруженных в нем элементов в собственные типы PHP (переменные, объекты и т.д.), а затем применить к этим собственным типам необходимые операции, как и в обычной программе. API-интерфейс SimpleXML позволяет обойтись без сложностей, связанных с выполнением большого количества дополнительных вызовов, которые требуются в API-интерфейсах SAX и DOM, и ограничиться меньшим объемом памяти. Кроме того, SimpIeXML часто предоставляет самый простой способ быстрого получения доступа к данным XML.

Тем не менее SimpIeXML имеет некоторые ограничения, в частности, этот API-интерфейс иногда ведет себя непредсказуемо при обработке атрибутов и глубоко вложенных элементов.

API-интерфейс DOM

API-интерфейс DOM объектной модели документа представляет собой всесторонне развитый API-интерфейс для создания, редактирования и синтаксического анализа документов XML. Сама технология DOM разработана в соответствии с рекомендациями консорциума W3C.

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

В основе расширения DOM языка PHP лежит синтаксический анализатор gnome-libxml2 (аналогичный программе libxml2 системы Gnome), поскольку считается, что эта программа требует меньше объема памяти, чем другие.

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

Применение DOM XML

Способы использования API-интерфейса DOM зависят от поставленных целей, но чаще всего требуется выполнить описанные ниже действия:

  1. Открыть новый документ DOM XML или прочитать его, поместив в оперативную память.
  2. Выполнить манипуляции с документом на уровне узлов.
  3. Вывести результирующий документ XML в виде строки или записать его в файл. Эта операция приводит также к освобождению памяти, используемой синтаксическим анализатором.

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

В результате выполнения этого кода генерируется XML-файл.

Функции DOM

В таблице ниже приведены наиболее распространенные функции DOM. Эти функции необходимо вызывать, прежде чем использовать какие-либо из прочих функций DOM XML!

Функции DOM XML верхнего уровня

Функция Назначение
domxml_open_mem() Принимает в качестве параметра строку, содержащую документ XML. Выполняет синтаксический анализ документа и создает объект Document
domxml_open_file() Принимает в качестве параметра строку, содержащую имя файла XML. Выполняет синтаксический анализ файла и создает объект Document
domxml_xmltree() Принимает в качестве параметра строку, содержащую документ XML. Создает дерево объектов PHP и возвращает объект DOM. Дерево объектов, возвращаемое этой функцией, допускает только чтение
domxml_new_doc() Создает новый, пустой документ XML в памяти. Возвращает объект Document

В таблице ниже приведены наиболее важные классы API-интерфейса DOM:

Классы DOM XML

Класс Назначение
DomDocument Инкапсулирует документ XML. Содержит корневой элемент и определение DTD, если таковое имеется
DomNode Инкапсулирует узел, или элемент. Узел может быть корневым или любым элементом в пределах корневого элемента. Узлы могут содержать другие узлы, символьные данные и атрибуты
DomAttr Инкапсулирует атрибут узла. Атрибут — это определяемая пользователем характеристика узла

В следующей таблице приведены наиболее важные методы класса DomDocument:

Методы классов DomDocument, DomNode и DomAttr

Метод Назначение
DomDocument -> createElement() Создает новый элемент, дескриптором которого является переданная строка. Этот элемент необходимо присоединить к другому элементу с помощью команды DomNode->appendChild()
DomDocument -> createTextNode() Создает новый текстовый узел (объект DomText). Этот узел необходимо присоединить к другому узлу с помощью команды DomNode->appendChild()
DomDocument -> save() Выводит документ XML из памяти в указанный файл
DomDocument -> saveXML() Выводит документ XML из памяти в строку. Необязательным параметром является объект DomNode
DomNode -> appendChild() Присоединяет узел к другому узлу
DomNode -> removeChild() Удаляет дочерний узел
DomAttr -> name() Возвращает имя атрибута
DomAttr -> value() Возвращает значение атрибута

API-интерфейс SAX

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

История развития API-интерфейса SAX является очень интересной, особенно в сопоставлении с API-интерфейсом DOM. Прежде всего, API-интерфейс SAX не разрабатывался под эгидой какой-либо официальной организации по стандартизации, а был создан группой программистов, объединившихся вокруг списка рассылки XML-DEV, многие из которых уже реализовали свои собственные синтаксические анализаторы XML (в первую очередь на языке Java) без применения стандартного API-интерфейса.

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

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

До выхода версии 5 в языке PHP использовался программный продукт expat Джеймса Кларка (James Clark) — широко применяемый инструментарий создания синтаксических анализаторов XML. Дополнительную информацию о программах expat можно найти на веб-сайте Кларка по адресу www.jclark.com/xml. Но если интерпретатор PHP откомпилирован вместе с библиотекой libxml2, то вы будете иметь возможность использовать весь свой код SAX для версии PHP4 и в версии PHP5 без каких-либо проблем.

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

Применение API-интерфейса SAX

Способы использования API-интерфейса SAX зависят от поставленных целей, но чаще всего осуществляются описанные ниже действия:

  1. Определить, какого рода события подлежат обработке.
  2. Написать функции обработчиков для каждого из событий. При этом почти наверняка потребуется написать обработчик символьных данных, а также обработчики для начальных и конечных элементов.
  3. Создать синтаксический анализатор с использованием функции xml_parser_create(), а затем вызвать его с помощью функции xml_parse().
  4. Освободить память, занимаемую синтаксическим анализатором, с помощью функции xml_parser_free().

Ниже приведен простой пример применения всех основных функций XML (XML-файлом, используемым в данном примере, является файл test_dom.xml, который был создан выше):

Опции настройки конфигурации SAX

Среди опций настройки синтаксического анализатора XML, применяемого в сочетании с API-интерфейсом SAX, имеются две реконфигурируемые опции. Одна из них относится к приведению к единому регистру, а другая — к выбору целевой кодировки.

Опция приведения к единому регистру сохранилась как последствие ряда решений, принятых в прошлом, поэтому в наши дни, после того как язык XML окончательно объявлен чувствительным к регистру, может оказаться недействительной. Ранее версии языков SGML и HTML были нечувствительными к регистру, и поэтому для получения единообразных результатов, подлежащих сравнению, использовалась операция приведения к единому регистру (преобразования всех символов в верхний или нижний регистр во время синтаксического анализа).

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

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

не согласуется с закрывающим дескриптором

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

Обработчики событий получают текстовые данные из синтаксического анализатора XML в одной из трех кодировок — ISO-8859-1, US-ASCII или UTF-8. По умолчанию применяется кодировка ISO-8859-1. Кодировка текста, передаваемого обработчикам событий, называется целевой кодировкой. По умолчанию целевая кодировка совпадает с кодировкой, используемой в исходном документе, которая называется исходной кодировкой. Если текст должен обрабатываться в кодировке, отличной от той, в которой он хранится, то можно изменить значение опции целевой кодировки.

Выборка значений опций кодировки и задание этих значений осуществляется с помощью функций xml_parser_get_option() и xml_parser_set_option(). Для управления операцией приведения к единому регистру используется константа XML_OPTION_CASE_FOLDING, а целевая кодировка задается с помощью константы XML_OPTlON_TARGET_ENCODING.

В следующем примере показано, как создать синтаксический анализатор XML, который считывает данные в коде ASCII, отменить опцию приведения к единому регистру и вывести результаты в кодировке UTF-8:

Функции API-интерфейса SAX

В таблице ниже приведен список наиболее важных функций SAX и описано их назначение:

Функции API-интерфейса SAX языка XML

Функция Назначение
xml_parser_create ([encoding]) Создает новый экземпляр синтаксического анализатора XML. В программе в любое время можно определить несколько разных синтаксических анализаторов. Возвращаемым значением является экземпляр синтаксического анализатора XML, в случае неудачного завершения функция возвращает значение false. Принимает один необязательный параметр — идентификатор кодировки символов (такой как UTF-8). Если кодировка не задана, по умолчанию применяется ISO-8859-1
xml_parse (parser, data, [final]) Вызывает на выполнение синтаксический анализатор XML. Ее параметрами являются синтаксический анализатор, созданный с использованием функции xml_parser_create(), строка, содержащая документ XML, и необязательный флажок завершения. Флажок завершения final позволяет указать, что текущий фрагмент данных представляет собой последний фрагмент, предназначенный для обработки этим синтаксическим анализатором
xml_get_error_code (parser) Если в процессе работы синтаксического анализатора возникает проблема, то выполняемый синтаксический анализ оканчивается неудачей. Вызов этой функции на выполнение позволяет определить код ошибки
xml_error_string (errorcode) После получения кода ошибки, возвращенного функцией xml_get_error_code(), возвращает строку, содержащую описание ошибки, которое может применяться для записи в лог
xml_set_element_handler (parser, start_element_handler, end_element_handler) Фактически устанавливает два обработчика, которые представляют собой просто функции. Первым из них является обработчик начального дескриптора элемента, имеющий доступ к имени элемента и к ассоциативному массиву атрибутов элемента, а вторым — обработчик конечного дескриптора элемента, который обеспечивает полный синтаксический анализ элемента
xml_set_character_data_handler (parser, cd_handler) Устанавливает функцию обработчика, которая вызывается каждый раз при обнаружении символьных данных. Функция обработчика принимает в качестве параметра строку, содержащую символьные данные
xml_parser_free (parser) Освобождает память, связанную с синтаксическим анализатором, который создан функцией xml_parser_create()
xml_set_default_handler (parser, handler) Устанавливает обработчик, применяемый по умолчанию. Если для некоторого события не указан ни один обработчик, то вызывается обработчик, применяемый по умолчанию, если он задан. Принимает в качестве параметра указатель на объект синтаксического анализатора и функцию-обработчик

API-интерфейс SimpleXML

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

В основе API-интерфейса SimpleXML лежит следующая идея: в программу передается сразу весь документ XML, после чего осуществляется синтаксический анализ документа и все результаты обработки документа сохраняются в памяти. Но документ хранится в памяти не в виде объекта DOM (с которым требуется выполнить дополнительные манипуляции, прежде чем использовать его содержимое), а в виде отдельных элементов, хранящихся в форме собственных переменных PHP, поэтому непосредственно доступных для применения. Безусловно, при решении многих задач, в которых используется API-интерфейс DOM, фактически не требуется проходить по всем дочерним и родительским узлам документа, а скорее необходимо применить одну и ту же операцию к группе вполне определенных узлов. Это означает, что SimpleXML в конечном итоге представляет собой характерный для языка PHP компромисс между подходами на основе SAX и DOM.

Использование API-интерфейса SimpleXML

При использовании API-интерфейса SimpleXML вначале с помощью функции simplexml_load_string() или simplexml_load_file() считывается представленный в какой-то форме (в виде строки или файла) код XML и присваивается переменной. Тем самым создается локальный объект, непосредственно доступный с помощью ссылки. В примере ниже показано, как можно применять API-интерфейс SimpleXML для получения значений переменных из файла XML с помощью всего лишь нескольких строк кода:

Функции API-интерфейса SimpleXML

В следующей таблице приведен список наиболее важных функций SimpleXML и указано их назначение:

Общие сведения о функциях SimpleXML

Что такое XML Parser?

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

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

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

Описывая разобранный XML-документ, универсальная программа-анализатор должна представить его структуру в виде упорядоченной модели данных, для доступа к которой используется какая-то станадртная, описанная в соответствующей спецификации библиотека классов — интерфейсов XML документа. На сегодняшний день существует два подхода к их построению: собыйтийный — Simple API for XML, SAX и объектно-ориентированный — DOM(Document Object Model). Рассмотрим их использование на конкретных примерах.

Илон Маск рекомендует:  Получение общей начальной информации о html
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL