Подтвердить что ты не робот

Распечатка значения переменной XSL

Может кто-нибудь рассказать мне, как распечатать переменную в моем преобразовании 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" (строка - не a node), я бы получил следующий вывод:

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

Попробуйте следующее:

<xsl:value-of select="$xmlElem"/>

Ответ 3

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

<xsl:value-of select="$xmlElem" />

Ответ 4

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

<xsl:value-of select="$xslElem" />