Реализация поведения по выбору в классе XslTransform
Обновлен: November 2007
![]() |
---|
Класс XslTransform в версии .NET Framework, версия 2.0 устарел. Можно выполнять XSLT-преобразование, используя класс XslCompiledTransform. Дополнительные сведения см. в разделах Использование класса XslCompiledTransform и Миграция с класса XslTransform. |
Поведение, реализуемое по усмотрению разработчика, определяется как один из возможных вариантов поведения, описанных в рекомендации W3C по преобразованиям XSL (XSLT) версии 1.0 (www.w3.org/TR/xslt), для которых поставщик реализации может выбрать один из возможных режимов обработки ситуации. Например, раздел 7.3 рекомендации W3C, «Создание инструкций по обработке», определяет, что, если при создании экземпляра содержимого xsl:processing-instruction создаются узлы, отличные от текстовых, это ошибка. В некоторых случаях рекомендации W3C указывают, какое решение следует принять, если обработчик решает провести восстановление после ошибки. Для проблемы, приведенной в разделе 7.3, W3C заявляет, что реализация может устранять эту ошибку, игнорируя узлы и их содержимое.
Поэтому в приведенной ниже таблице для всех разрешенных W3C ситуаций, где поведение оставлено на усмотрение разработчика, описывается поведение, реализуемое по усмотрению разработчика, реализованное для класса XslTransform в среде .NET Framework, и указывается, в каком разделе рекомендаций W3C по XSLT 1.0 обсуждается эта проблема.
Проблема |
Поведение |
Раздел |
---|---|---|
Текстовый узел соответствует как xsl:strip-space, так и xsl:preserve-space. |
Восстановление |
3.4 |
Исходный узел соответствует более одному правилу шаблона. |
Восстановление |
5.5 |
Объявляется URI-код пространства имен, который будет служить псевдонимом для нескольких URI-кодов пространств имен с одинаковым приоритетом импорта. |
Восстановление |
7.1.1 |
Атрибут имени в элементах xsl:attribute и xsl:element, созданных из шаблона значения атрибута, не является допустимым полным именем (QName). |
Вызов исключения |
7.1.2 и 7.1.3 |
Добавление атрибута к элементу после того, как к узлу элемента уже были добавлены дочерние узлы. |
Восстановление |
7.1.3 |
Добавление атрибута к любому другому объекту, кроме узла элемента. |
Восстановление |
7.1.3 |
Созданный экземпляр содержимого элемента xsl:attribute не является текстовым узлом. |
Восстановление |
7.1.3 |
У двух наборов атрибутов совпадает и приоритет импорта, и развернутое имя. Один атрибут у двух наборов совпадает, и нет другого набора атрибутов с более высоким приоритетом, который содержал бы атрибут с таким же именем. |
Восстановление |
7.1.4 |
Атрибут имени xsl:processing-instruction не содержит одновременно имени без двоеточий (NCName) и цели инструкции по обработке. |
Восстановление |
7.3 |
При создании экземпляра содержимого xsl:processing-instruction создаются узлы, отличные от текстовых. |
Восстановление |
7.3 |
Результаты создания экземпляра содержимого xsl:processing-instruction содержат строку «?>». |
Восстановление |
7.3 |
Результаты создания экземпляра содержимого xsl:comment содержат строку «--» или заканчиваются символом «-». |
Восстановление |
7.4 |
При создании экземпляра содержимого xsl:comment создаются узлы, отличные от текстовых. |
Восстановление |
7.4 |
Шаблон внутри привязывающегося к переменной элемента возвращает узел атрибута или узел пространства имен. |
Восстановление |
11.2 |
Ошибка при извлечении ресурса по URI-идентификатору, переданного в функцию документа. |
Вызов исключения |
12.1 |
URI-ссылка в функции документа содержит идентификатор фрагмента, и при обработке этого идентификатора произошла ошибка. |
Вызов исключения |
12.1 |
Существует несколько атрибутов с одинаковым именем, не совпадающим с атрибутом cdata-section-elements в элементе xls:output, и у этих атрибутов одинаковый приоритет импорта. |
Восстановление |
16 |
Процессор не поддерживает кодировку символов, заданную атрибутом encoding элемента xsl:output. |
Восстановление |
16.1 |
Атрибут disable-output-escaping используется для текстового узла, и этот текстовый узел используется для создания объекта, который не является текстовым узлом в результирующем дереве. |
Атрибут disable-output-escaping не учитывается |
16.4 |
Преобразование фрагмента дерева результатов в число или строку, если этот фрагмент содержит текстовый узел с включенным экранированием выходных данных. |
Не учитывается |
16.4 |
Экранирование выходных данных отключено для символов, которые невозможно представить в кодировке, используемой обработчиком XSLT для выходных данных. |
Не учитывается |
16.4 |
Добавление узла пространства имен к элементу после того, как к этому элементу добавлены дочерние элементы или атрибуты. |
Восстановление |
Поправка e25 |
Элемент xsl:number имеет значение NaN, бесконечность или число меньше 0,5. |
Восстановление |
Поправка e24 |
Второй аргумент node-set функции документа пуст, и URI-ссылка является относительной. |
Восстановление |
Поправка e14 |
Разделы из поправок можно найти в поправках к спецификации рекомендации W3C по XSLT версии 1.0 по адресу www.w3.org/1999/11/REC-xslt-19991116-errata.
Определяемое пользователем поведение реализации
Некоторые виды поведения уникальны для реализации класса XslTransform. В данном разделе обсуждаются особенности реализации функции xsl:sort конкретным поставщиком и дополнительные функции, поддерживаемые классом XslTransform.
xsl:sort
Рекомендация W3C по XSLT 1.0 содержит некоторые замечания по использованию преобразований для сортировки. Они перечислены ниже.
Два обработчика XSLT могут быть подобны, но при этом по-разному выполнять сортировку.
Не все обработчики XSLT поддерживают одинаковый набор языков.
Что касается языков, различные обработчики могут по-разному проводить обработку для конкретного языка, не указанного в элементе xsl:sort.
В таблице показано поведение при сортировке, реализованное для каждого типа данных в реализации преобразования платформы .NET Framework с помощью класса XslTransform.
Тип данных |
Поведение при сортировке |
---|---|
Текстовый |
Данные сортируются методом среды CLR String.Compare с учетом языкового стандарта культуры. Для типа данных «text» сортировка, реализованная в классе XslTransform, идентична сравнению строк в среде CLR. |
Числовой |
Числовые значения обрабатываются как числа языка XPath и сортируются в соответствии со структурой, приведенной в разделе 3.5 рекомендаций W3C по XPath версии 1.0 (www.w3.org/TR/xpath.html#numbers). |
Поддерживаемые дополнительные функции
В следующей таблице перечислены дополнительные функции обработчика XSLT, реализованные в классе XslTransform.
Функция |
Местоположение ссылки |
Примечания |
---|---|---|
Атрибут disable-output-escaping для тегов <xsl:text...> и <xsl:value-of...>. |
Рекомендация W3C по XSLT 1.0, раздел 16.4 |
Атрибут disable-output-escaping не обрабатывается, если элементы xsl:text или xsl:value-of используются в элементах xsl:comment, xsl:processing-instruction или xsl:attribute. Фрагменты результирующего дерева, содержащие экранированный текст и экранированные текстовые выходные данные, не поддерживаются. Атрибут disable-output-escaping не учитывается при преобразовании в объект XmlReader или XmlWriter. |
См. также
Основные понятия
Реализация классом XslTransform XSLT-процессора
XSLT-преобразования с помощью класса XslTransform
XPathNavigator в преобразованиях
XPathNodeIterator в преобразованиях
Ввод XPathDocument в XslTransform
Ввод XmlDataDocument в XslTransform
Ввод XmlDocument в XslTransform