Функция XSLT-документа ('') не работает - PullRequest
4 голосов
/ 27 января 2011

Как я понял из документов, функция XSLT document () с пустой строкой в ​​качестве параметра должна читать текущий документ XSLT.Но следующий код не работает:

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <state>test2</state>
   <xsl:template match="/">
      test1
      <xsl:value-of select="document('')/*/state"/>
    </xsl:template>
   </xsl:stylesheet>

Когда я применяю этот XSLT к некоторому XML (только для примера), у меня есть только «test1» в качестве вывода.Почему строка

 <xsl:value-of select="document('')/*/state"/>

не печатает "test2"?

Ответы [ 2 ]

10 голосов
/ 27 января 2011

Определение документа ('') состоит в том, что он читает документ XML, URI которого совпадает с базовым URI инструкции в таблице стилей, содержащей вызов документа ('').Если вы не используете внешние объекты, это обычно совпадает с базовым URI модуля таблицы стилей.Если это не работает, это часто потому, что базовый URI модуля таблицы стилей неизвестен.Это может легко произойти, если процессору XSLT предоставляется таблица стилей, которая находится в памяти (например, в виде строки символов или DOM), а не ресурс, извлекаемый через URI.Например, если вы используете JAXP StreamSource и не вызываете setSystemId (), тогда базовый URI будет неизвестен.

1 голос
/ 27 января 2011

Вы должны объявить свое собственное пространство имен, например:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:my="http://localhost"
    exclude-result-prefixes="my">
    <xsl:output method="text"/>

    <my:state>test2</my:state>

    <xsl:template match="/">
        <xsl:text>test1</xsl:text>
        <xsl:value-of select="document('')/*/my:state"/>
    </xsl:template>
</xsl:stylesheet>

Ouput:

test1test2

Цитата Майкла Кей:

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

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