xsi: nil в xslt - как его использовать - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь установить xsi: nil для элемента, но получил это:

Attribute 'http://www.w3.org/2001/XMLSchema-instance, nil' must not appear on element 'xsl:element', because the {nillable} property of 'xsl:element' is false.




<xsl:element name="elem" namespace="namespace" xsi:nil="true">
    <xsl:text></xsl:text>
</xsl:element>

1 Ответ

0 голосов
/ 28 ноября 2018

Из §11.1.2 спецификации XSLT 3.0 (в равной степени применимо к более ранним версиям):

Атрибуты xml: base, xml: lang, xml: space и xml: id имеют дваэффекты в XSLT.Они ведут себя как стандартные атрибуты XSLT, что означает, например, что если они появятся в буквальном элементе результата, они будут скопированы в дерево результатов так же, как и любой другой атрибут.Кроме того, они имеют стандартное значение, определенное в основных спецификациях XML.Таким образом, атрибут xml: base в таблице стилей влияет на базовый URI элемента, в котором он появляется, а атрибут xml: space влияет на интерпретацию текстовых узлов пробелов в этом элементе.Одним из следствий этого является то, что нежелательно записывать эти атрибуты как шаблоны значений атрибутов: хотя процессор XSLT будет понимать эту запись, синтаксический анализатор XML не будет.См. Также 11.1.4 Псевдоним пространства имен, в котором описано, как использовать псевдоним xsl: namespace с этими атрибутами.

То же самое верно для атрибутов, определенных в схеме: xsi: type, xsi: nil, xsi: noNamespaceSchemaLocation иXSI: SchemaLocation.Если таблица стилей обрабатывается процессором схемы, эти атрибуты будут распознаваться и интерпретироваться процессором схемы, но, кроме того, процессор XSLT обрабатывает их как любой другой атрибут в буквальном элементе результата: то есть их эффективное значение (после расширения атрибутаШаблоны значений) копируется в дерево результатов так же, как и любой другой атрибут.Если дерево результатов проверено, скопированные атрибуты снова будут распознаваться и интерпретироваться процессором схемы.

На практике это означает, что лучше избегать включения этих специальных атрибутов буквально в таблицу стилей.Если вы хотите сгенерировать их в дереве результатов, используйте xsl:attribute для достижения этого.Вы также можете использовать xsl:namespace-alias, чтобы использовать другой URI пространства имен, связанный с «специальным» URI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...