如何根据其他节点的值获取xsl中节点的值

时间:2014-03-07 18:24:30

标签: xml xslt

如何获取节点“s”内提供的字符串的索引,并根据“strings”节点中的名称查找相应的索引值?

这是我的XSL模板:

 <xsl:template match="norm" >
     <xsl:variable name="name" select="@string" />
     <xsl:value-of select="/s/string/@name=$name/@index"/>,
 </xsl:template>

这是我的源XML片段:

<s name="main">
    <norm string="back-slash"/>
    <norm string="open-braces" />
    <norm string="close-braces" />
</s>
<strings  name="consts">
  <string name="back-slash" val="\\" index="0"/>
  <string name="close-braces" val="]" index="2"/>
  <string name="remove-null" val="null" index="3" /> 
</strings>

2 个答案:

答案 0 :(得分:1)

你想:

<xsl:value-of select="//strings/string[@name=$name]/@index" />

您做错的最重要的事情是您使用/代替[]来封闭条件@name=$name

如果您需要/s,还可以使用//strings。没有s/string元素。

答案 1 :(得分:1)

我会定义一个键<xsl:key name="s" match="strings/string" use="@name"/>,然后在模板中使用<xsl:value-of select="key('s', @string)/@index"/>