xslt - 将变量分配给在 xslt 的循环中选择的值
问题描述
我在这里所做的工作 - 我只是想知道是否有更好或更有效的方法来完成同样的事情。
这是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”,但它有点慢,所以我想知道是否有任何我可能没有想到的替代解决方案。
解决方案
<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')"/>
。
推荐阅读
- javascript - 如何在 React with Jest 中测试 Typescript 类成员
- stomp - 如何设置 AMQ 消息的属性
- google-chrome - 禁用 Internet 访问以测试 ionic 应用程序,但仍从 localhost 提供文件
- kubernetes - iam ConfirmSubscription 权限错误
- odbc - 在 Windows 10 上找不到 Lotus Notes ODBC
- reactjs - 我们可以在一个组件中有多个 useEffect 挂钩吗
- c# - 您可以使用原始 graphQL 语法使用 octokit.net 库在 c# 中查询 github API v4 吗?
- asp.net - 受保护的异步子程序未在生产中执行
- bash - sed 在模式中保留通配符值
- mysql - mysql xdevapi nodejs:返回插入的行 auto_increment id