Распечатка значения переменной XSL - PullRequest
17 голосов
/ 02 апреля 2009

Может кто-нибудь сказать мне, как распечатать переменную в моем XSL-преобразовании? Кажется, это достаточно легко сделать, но я просто не могу этого сделать. Вот код, который у меня есть:

<?xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet version="1.0"
  xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template name="ControlledListStructure">
    <xsl:param name="xmlElem" />
    <xsl:param name="dataName" />

    <xsl:element name="{$xmlElem}">
      1: <xsl:text>{$xmlElem}</xsl:text>.
      2: {$xmlElem}.
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

Если бы я назвал этот шаблон со значением для xmlElem «Wibble» (строка - не узел), я бы получил следующий вывод:

<Wibble>
      1: {$xmlElem}.
      2: {$xmlElem}.
</Wibble>

Итак, мой параметр отображается правильно, я просто не могу получить к нему доступ должным образом. Может кто-нибудь сказать мне, как я могу заставить $ xmlElem правильно распечатать, чтобы я увидел:

<Wibble>
      1: Wibble.
      2: Wibble.
</Wibble>

Спасибо за любой вклад.

Ответы [ 4 ]

32 голосов
/ 02 апреля 2009

Во всех ответах отсутствует что-то важное: читайте дальше:

Может кто-нибудь подскажите пожалуйста как распечатать переменную в моем XSL преобразования? Похоже, достаточно легко что нужно сделать, но я просто не могу сделай это.

В XSLT 1.0 есть два основных способа получения содержимого <xsl:variable>, в зависимости от того, содержит ли оно скалярное значение (строка, число или логическое значение), или имеет структурированное значение - набор узлов (один или несколько узлов из XML-документов):

  1. <xsl:value-of select="$yourscalarVariableName"/> Используйте это для получения скалярного значения. Фактически создает текстовый узел, содержащий это скалярное значение.

  2. <xsl:copy-of select="$yourStructuredVariableName"/> Используйте это для создания копии всех узлов, содержащихся в переменной.

Очень важно знать , что если xsl:variable содержит список узлов и используется инструкция <xsl:value-of ...>, будет получено только строковое значение первого узла. Это часто совершаемая ошибка и часто задаваемые вопросы.

Существует третий способ : если при создании атрибута следует использовать <xsl:variable>:

  <someLiteralResultElement someAttribute="{$theVariable}"/>

Выражение XPath в фигурных скобках (называемое AVT - атрибут-значение-шаблон ) оценивается и результат помещается в значение атрибута.

В XSLT 2.0 инструкция <xsl:value-of .../>, если она выполняется не в режиме совместимости, создает список текстовых узлов - по одному для каждого узла, содержащегося в xsl:variable. При запуске в режиме совместимости (с указанным атрибутом version="1.0") инструкция <xsl:value-of> ведет себя так же, как в XSLT 1.0.

В Xslt 2.0 <xsl:copy-of> ведет себя так же, как в XSLT 1.0. Однако рекомендуется использовать новую инструкцию <xsl:sequence>, поскольку первая создает новую копию каждого узла, а <xsl:sequence> не создает новых копий узлов.

10 голосов
/ 02 апреля 2009

Попробуйте это:

<xsl:value-of select="$xmlElem"/>
4 голосов
/ 02 апреля 2009

Вы можете использовать:

<xsl:value-of select="$xmlElem" />
3 голосов
/ 02 апреля 2009

Синтаксис {$ xmlElem} работает только внутри атрибута. Вам нужно:

<xsl:value-of select="$xslElem" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...