2016-06-27 1 views
0

Я пытаюсь добавить класс к <xsl:element> при определенном условии, у меня есть тег xml с атрибутом def, мне нужно добавить класс, когда когда-либо этот атрибут существует.добавить атрибут класса к `<xsl:element>` при определенном условии

Вот элемент XSLT:

<xsl:element name="{if (@id='123') then 'th' else 'td'} > 
<xsl:apply-template /> 
</xsl:element> 

Что я пробовал:

<xsl:attribute name="class">def- 
     <xsl:if test="fn:exists(@def)"> 
     <xsl:value-of select="@def"/> 
     </xsl:if> 
    </xsl:attribute> 
    <xsl:element name="{if (@role='rowhead') then 'th' else 'td'}" use-attribute-sets="{$class}" > 
<xsl:apply-templates /> 
    </xsl:element> 

Я хотел бы выражение соответствия этого:

<th scope="row" class="def-{if (fn:exists(@def)) then @def else ''}"> 
<td scope="row" class="def-{if (fn:exists(@def)) then @def else ''}"> 

с помощью:

<xsl:element> 
+0

Можете ли вы привести пример того, что вы ожидаете от своего вывода? Кроме того, если вы также покажете свой входной XML, это тоже поможет. Благодаря! –

+0

@TimC Я отредактировал мой вопрос, пожалуйста, проверьте его. Спасибо –

ответ

1

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

<xsl:element name="{if (@role='rowhead') then 'th' else 'td'}"> 
    <xsl:if test="fn:exists(@def)"> 
     <xsl:attribute name="class" select="concat('def-', @def)"/> 
    </xsl:if> 
    <xsl:apply-templates /> 
</xsl:element> 

Если вы используете xsl:attribute сразу после того, как xsl:element атрибут добавляемый к элементу. Обратите внимание, что атрибуты должны создаваться перед любыми дочерними элементами.

+0

Спасибо, если я могу спросить, что использование use-attribute-sets = "{$ class}" –

+0

Это когда у вас есть набор атрибутов, определяемых 'xsl: attribute-set', которые вы хотите добавить в легко добавить к нескольким элементам. См. Https://www.w3.org/TR/xslt#attribute-sets –