XSLT变量作为属性打印

时间:2012-06-21 02:05:27

标签: xslt xslt-1.0

是否有办法将元素中的变量作为属性打印?

示例xml:

<list>
<name>John Doe</name>
<name>Paul Niel</name>
<name>Luke Dee</name>
</list>

这是我的样本xslt;

<xsl:variable name="isDisabled">
    <xsl:if test="name='John Doe'">
        <xsl:attribute name="disabled">disabled</xsl:attribute>
    </xsl:if>
</xsl:variable>

我想像这样打印isDisabled变量;

<input id="textName" name="name" type="text" {$isDisabled} />

输出;

<input id="textName" name="name" type="text" disabled="disabled" />

1 个答案:

答案 0 :(得分:1)

您无需任何变量即可完成此任务

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

 <xsl:template match="name[. = 'John Doe']">
  <input id="textName" name="name" type="text" disabled="disabled" />
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

在提供的XML文档上应用此转换时

<list>
    <name>John Doe</name>
    <name>Paul Niel</name>
    <name>Luke Dee</name>
</list>

产生了想要的正确结果:

<input id="textName" name="name" type="text" disabled="disabled"/>

<强>解释

正确使用模板和模板模式匹配。

注意:如果你有一个案例(不是这个),真的需要使用变量创建一个属性,这可以在下面完成方式:

<input id="textName" name="name" type="text" disabled="{$isDisabled}"/>

<强>解释

正确使用AVT( Attribute Value Templates