Пространство имен по умолчанию для xsl: document - PullRequest
1 голос
/ 25 марта 2019

Первоначально я создал следующую переменную:

<xsl:variable as="document-node()" name="changesTexts">
            <xsl:document>
                <ps >
                    <p>Processed with <ptr target="#{$applicationID}"/>.</p>
                    <p>proofreading according to workflow 1.1.</p>
                </ps>
            </xsl:document>
</xsl:variable>

Когда я попытался получить к ней доступ таким образом

<xsl:variable name="p" select="$changesTexts//p"/>

Это не сработало: в результате появился пустой элемент (),

После того как я добавил пространство имен к корневому элементу,

<ps xmlns="http://www.music-encoding.org/ns/mei">

Я могу получить доступ к нужным элементам следующим образом:

  <xsl:variable name="p" select="$changesTexts//mei:p"/>

Таким образом, в основном я решил свою проблему, но яхотел бы понять, как все работает.Я не мог понять, какое пространство имен по умолчанию получают элементы в первом случае.Я попытался:

  • name () (Кстати, это не показывает мне пространство имен в обычном XML-документе)
  • namespace-uri ()

Кроме того, я заметил в отладчике, что переменная $ changesTexts имеет тип document-node, а в других случаях, когда я использую fn:document(), переменные имеют тип document-node (1).Так что, очевидно, есть небольшая разница (?)

1 Ответ

1 голос
/ 26 марта 2019

Когда вы используете буквальный элемент результата S в XSLT для создания элемента R в вашем дереве результатов, расширенное имя R будет таким же, как расширенное имя S: то есть у него будет то же самое локальное имя и то же пространство имен.

Таким образом, пространство имен элементов, созданных вашими инструкциями <ps> и <p>, определяется пространством имен по умолчанию, объявленным в таблице стилей (возможно, в элементе xsl:stylesheet, но может быть в каком-то внутреннем элементе).

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