как сделать элемент внутри переменной - PullRequest
1 голос
/ 05 октября 2011

XSLT 1.0 Мне понадобится переменная со следующей структурой, в основном мне нужно создать переменную, которая на самом деле является элементом. Я знаю, это выглядит глупо, но мне нужна такая вещь из-за ограниченности других вещей.

 <xsl:variable name="options">
                <xsl:element name="option">
                        <xsl:attribute name="value">
                            <xsl:text>test1</xsl:text>
                        </xsl:attribute>

                       <xsl:text>test1</xsl:text>
                    </xsl:element>
        </xsl:variable>

Теперь проблема в том, когда я вызываю его позже в шаблоне с

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

в выходном html есть только test1 вместо того, что я хочу

<option>test1</option>

Так что это означает, что тег отсутствует. Какой правильный синтаксис для этого? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Нужно сделать разницу между <xsl:value-of> и <xsl:copy-of>

В XSLT 1.0 инструкция <xsl:value-of> создает текстовый узел, который содержит строковое значение результата вычисления выражения XPath, указанного в атрибуте select. По определению, строковое значение элемента - это конкатенация (в порядке документа) всех его потомков текстовых узлов - так вы получите строку "test1" output.

Для контраста:

<xsl:copy-of>

выводит копию каждого узла набора узлов, выбранного с помощью выражения XPath, указанного в атрибуте select.

Поэтому, чтобы скопировать полное содержимое $options, вам необходимо указать:

<xsl:copy-of select="$options" /> 

Вот полный пример :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="vOptions">
  <option value="test1">test1</option>
 </xsl:variable>

 <xsl:template match="/">
  <xsl:copy-of select="$vOptions"/>
 </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к любому XML-документу (не используется), получается нужный, правильный результат :

<option value="test1">test1</option>
1 голос
/ 05 октября 2011

попробуй:

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