XSLT选项选择器

时间:2014-01-23 10:20:24

标签: xml xslt

遇到

的XML时
<entity1>
    <name>2345</name>
    <type notNull="1" size="normal">select</type>
    <value>D</value>
    <options>
        <option />
        <option>
            <value>A</value>
            <show>Alpha</show>
        </option>
        <option>
            <value>B</value>
            <show>Beta</show>
        </option>
        <option>
            <value>G</value>
            <show>Gamma</show>
        </option>
        <option>
            <value>D</value>
            <show>Delta</show>
            <selected />
        </option>
</entity1>

如何从entity1中提取“Delta”,根据值或“&lt; selected /&gt;”进行加工标记

谢谢!

2 个答案:

答案 0 :(得分:2)

假设当前上下文节点是entity1,您可以使用

<xsl:value-of select="options/option[selected]/show" />

根据<selected/>元素或

的存在来查找它
<xsl:value-of select="options/option[value=current()/value]/show"/>

根据匹配<value>找到它(current()函数为您提供当前上下文节点,即.顶层select的任何内容表达式,在本例中为entity1)。

答案 1 :(得分:0)

您可以使用variable,如下所示:

   <xsl:template match="/entity1">
      <xsl:variable name="selected" select="value"></xsl:variable>
      <xsl:value-of select="options/option[value=$selected]/show"/>
   </xsl:template>

对于批量查找,更好的选择是使用key

   <xsl:key name="selected" match="/entity1/options/option" use="value" />

   <xsl:template match="/entity1">
      <xsl:value-of select="key('selected', value)/show"></xsl:value-of>
   </xsl:template>