将变量分配给在xslt中的循环中选择的值

时间:2018-08-13 19:28:51

标签: xslt xslt-1.0

我在这里正在做的事情-我只是想知道是否有更好或更有效的方法来完成同一件事。

这是XML结构

<tags>
     <tag>
          <val1>abc</val1>
          <val2>123</val2>
     </tag>
        <tag>
          <val1>def</val1>
          <val2>456</val2>
     </tag>
     <tag>
          <val1>ghi</val1>
          <val2>789</val2>
     </tag>
</tags>

我需要为val2的值分配一个变量,但是仅当val1 ='def' 所以最后我想要一个等于456的变量

可以保证这些值是唯一的,因此“ def”将仅存在一次

我解决此问题的方法是在循环中将变量分配给该值,以检查我要查找的值

<xsl:variable name="id">
     <xsl:for-each select="tags/tag">
          <xsl:variable name="role"><xsl:value-of select="val1"/ </xsl:variable>
          <xsl:if test="$role = 'def'">
               <xsl:value-of select="val2"/>
          </xsl:if>
      </xsl:for-each>
 </xsl:variable>

此解决方案可以正常工作,并且已将值456正确分配给变量“ id”,但是它有点慢,所以我想知道是否还有我可能不会想到的替代解决方案。

1 个答案:

答案 0 :(得分:2)

您可以简单地使用<xsl:variable name="id" select="tags/tag[val1 = 'def']/val2"/>选择元素或定义键<xsl:key name="val2-by-val1" match="tags/tag/val2" use="../val1"/>,然后选择<xsl:variable name="id" select="key('val2-by-val1', 'def')"/>