xsl: элемент хранится как переменная? - PullRequest
3 голосов
/ 20 сентября 2011

Можете ли вы сохранить имя элемента как переменную, которая будет вызвана позднее?

Например:

<xsl:variable name="element">
            <xsl:choose>
                <xsl:when test="Argument1">strong</xsl:when>
                <xsl:when test="Argument2">em</xsl:when>
            </xsl:choose>
        </xsl:variable>
        <xsl:element name="{$element}">
            <a href="{$url}">
                <xsl:value-of select="title"/>
            </a>
        </xsl:element>

Таким образом, на основе предопределенного аргумента, оборачиваемый элементвокруг тега привязки должно быть либо <strong>, либо <em>.

. Или я подхожу к этому неправильно?

Обойдя длинный круг и дублируя тег привязки внутри оператора выбора когдадля каждого аргумента, кажется, не работает.

Спасибо, Кевин

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Ваш подход полностью действителен.

В качестве альтернативы можно использовать два шаблона:

<xsl:template match="someElement[Argument1]">
 <strong>
   <a href="{$url}">                 
     <xsl:value-of select="title"/>             
   </a>  
 </strong>
</xsl:template>

<xsl:template match="someElement[Argument2]">
 <em>
   <a href="{$url}">                 
     <xsl:value-of select="title"/>             
   </a>  
 </em>
</xsl:template>

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

1 голос
/ 20 сентября 2011

Я думаю, что ваш опубликованный образец должен работать.С XSLT 2.0 вы могли бы даже <xsl:element name="{if (Argument1) then 'strong' else if (Argument2) then 'em' else ()}">.

...