XSLT动态元素选择

时间:2014-12-24 12:04:49

标签: xslt-2.0

我希望仅使用本机XSLT2.0函数动态打印存在于控件列表中的元素。

<xsl:variable name="controlList">name</xsl:variable>

<M N="name" V="Bill Billson"/>
<M N="address" V="1234 street name"/>
<M N="country" V="United Kingdom"/>
<M N="phone" V="123456789"/>

需要输出:

Bill Billson

但最终它需要处理控制列表中的多个值,例如

<xsl:variable name="controlList">name,address,phone</xsl:variable>

到目前为止,我已经尝试了许多不同的排列,但没有得到所需的结果。

<xsl:value-of select="M[@N='{$controlList}']/@V"/>

  <xsl:for-each select="M">
        <xsl:value-of select="/[@name=$controlList]/@V"/>
  </xsl:for-each>

非常感谢任何帮助。这可能不适用于本机XSLT2.0函数

1 个答案:

答案 0 :(得分:1)

将变量定义为<xsl:variable name="controlList" select="'name', 'address', 'phone'"/>,然后您可以使用M[@N = $controlList]/@V。有关示例,请参阅http://xsltransform.net/6qVRKw1

如果你不能将第一个变量设置为一个字符串序列,那么计算第二个变量,例如

<xsl:variable name="controlList">name,address,phone</xsl:variable>
<xsl:variable name="controlSeq" select="tokenize($controlList, ',')"/>

然后您还可以在

中进行=比较
<xsl:value-of select="M[@N = $controlSeq]/@V"/>