Поделиться через


Устранимые ошибки XSLT

Рекомендация W3C по XSL-преобразованиям (XSLT) версии 1.0 включает в себя такие области, в которых поставщик реализации может решать, как обрабатывать ситуацию. Эти области считаются предоставленными на усмотрение поставщика. Например, в разделе 7.3 «Инструкции по обработке при создании» рекомендаций XSLT 1.0 указывается на ошибку, которая возникает, если при формировании экземпляра содержимого xsl:processing-instruction создаются узлы, отличные от текстовых. Для некоторых проблем в рекомендациях XSLT 1.0 указывается решение, которое следует принять, если обработчик решает устранить ошибку. Для проблемы, приведенной в разделе 7.3, W3C заявляет, что реализация может устранять эту ошибку, игнорируя узлы и их содержимое.

Возможные поведения

В следующей таблице перечислены возможные поведения, разрешенные рекомендациями XSLT 1.0, и способы обработки этих поведений классом XslCompiledTransform.

Условие XSLT Раздел Поведение XslCompiledTransform
Текстовый узел соответствует как xsl:strip-space, так и xsl:preserve-space. 3,4 Восстановить
Исходный узел соответствует более одному правилу шаблона. 5.5 Восстановить
URI-код пространства имен объявлен в качестве псевдонима для нескольких URI-кодов пространств имен, каждый из которых имеет одинаковый приоритет импорта. 7.1.1 Восстановить
Атрибут name в узлах xsl:attribute и xsl:element, сформированный из значения атрибута, не является QName. 7.1.2, 7.1.3 Ошибка*
Два набора атрибутов с одинаковым именем импорта и развернутым именем имеют общий атрибут, и не существует другого набора атрибутов, содержащего общий атрибут с таким же именем, имеющего большую важность. 7.1.4 Восстановить
Добавление атрибута к элементу после добавления к нему потомков. 7.1.3 Ошибка*
Создание атрибута с именем «xmlns» 7.1.3 Ошибка*
Добавление атрибута к узлу, который не является элементом. 7.1.3 Ошибка*
Создание узлов, отличных от текстовых узлов, во время создания экземпляра содержимого атрибута xsl:attribute. 7.1.3 Ошибка*
Атрибут name в узле xsl:processing-instruction не содержит NCName и назначения инструкции по обработке. 7.3 Ошибка*
При создании экземпляра содержимого xsl:processing-instruction создаются узлы, отличные от текстовых. 7.3 Ошибка*
Результат создания экземпляра содержимого xsl:processing-instruction содержит строку "?>" 7.3 Восстановить
Результат создания экземпляра содержимого узла xsl:processing-instruction содержит строку «--» или заканчивается на «-». 7,4 Восстановить
Результат создания экземпляра содержимого узла xsl:comment создает узлы, отличные от текстовых узлов. 7,4 Ошибка*
Шаблон внутри привязывающегося к переменной элемента возвращает узел атрибута или узел пространства имен. 11.2 Ошибка*
Ошибка при извлечении ресурса по URI-идентификатору, переданного в функцию документа. 12,1 Ошибка
URI-ссылка в функции документа содержит идентификатор фрагмента, и возникает ошибка обработки идентификатора фрагмента. 12,1 Восстановление*
Существует несколько атрибутов с одним именем, но различными значениями, которые не являются именованными элементами cdata-section в узле xsl:output с тем же приоритетом импорта. 16 Восстановить
Обработчик не поддерживает кодирование в атрибуте кодировки узла xsl:output. 16.1 Восстановить
Отключение экранирования выхода для текстового узла, который используется в качестве узла, отличного от текстового, в дереве результатов. 16.4 Восстановление*
Преобразование фрагмента дерева результатов в число или строку, если этот фрагмент содержит текстовый узел с включенным экранированием выходных данных. 16.4 Восстановление*
Экранирование выхода отключено для символа, который нельзя представить в кодировке, используемой обработчиком XSLT для выхода. 16.4 Восстановление*
Добавление узла пространства имен к элементу после того, как к нему был добавлен потомок или атрибуты. поправка 25 Ошибка*
Атрибут value в узле xsl:number имеет значение NAN, бесконечное или менее 0,5. поправка 24 Восстановить
Второй аргумент node-set функции документа пуст, поэтому URI-ссылка является относительной. поправка 14 Восстановить

*Это поведение отличается от класса XslTransform. См. дополнительные сведения по реализации избирательного поведения в классе XslTransform.

См. также