xslt - 在 foreach 循环中使用变量构建 XSLT 字符串
问题描述
我面临的问题对其他人来说可能很简单,但作为初学者 XSL - 我还没有找到合适的解决方案。我想要做的是通过连接在 for-each 循环中定义的变量的结果来构建一个字符串。
对不起,应该是这样的:
<linked-hash-map>
<entry>
<string>properties</string>
<list>
<linked-hash-map>
<entry>
<string>property_id</string>
<int>123</int>
</entry>
<entry>
<string>type</string>
<string>H</string>
</entry>
<entry>
<string>status</string>
<string>CURRENT</string>
</entry>
<entry>
<string>description</string>
<string>Test</string>
</entry>
<entry>
<string>lots</string>
<list>
<linked-hash-map>
<entry>
<string>lot_id</string>
<int>123</int>
</entry>
<entry>
<string>lot_number</string>
<int>11</int>
</entry>
<entry>
<string>plan_number</string>
<int>100</int>
</entry>
<entry>
<string>plan_type</string>
<string>CC</string>
</entry>
<entry>
<string>plan_id</string>
<int>1</int>
</entry>
</linked-hash-map>
</list>
</entry>
</linked-hash-map>
</list>
</entry>
所需输出:SP - 31 - 108661
所以基本上我想将plan_type、lot_number和plan_number连接成一个字符串。
我试过这个:
<xsl:for-each select="linked-hash-map/entry/linked-hash-map/entry/list/linked-hash-map/entry" >
<xsl:choose>
<!-- LOT NUMBER -->
<xsl:when test="string[1] = 'lot_number'">
<xsl:variable name="lot_number" select="int" />
</xsl:when>
<!-- PLAN NUMBER -->
<xsl:when test="string[1] = 'plan_number'">
<xsl:variable name="plan_number" select="int" />
</xsl:when>
<!-- PLAN TYPE -->
<xsl:when test="string[1] = 'plan_type'">
<xsl:variable name="plan_type" select="string[2]" />
</xsl:when>
</xsl:choose>
</xsl:for-each>
<!-- LOT DETAIL -->
// concatenate string in here.
<xsl:value-of select="concat($plan_type, '-', $lot_number, '-', $plan_number)" />
但它不起作用,因为变量超出范围。我怎样才能实现所需的输出?谢谢你。
解决方案
请注意,变量在声明它们的块的范围内是局部的,因此在这种情况下,每个变量只能在xsl:when
但是这里不需要xsl:for-each
或变量。你可以做这样的事情(假设你在模板匹配linked-hash-map
<xsl:value-of select="concat(entry[string[1]='plan_type']/string[2], '-', entry[string[1]='lot_number']/int, '-', entry[string[1]='plan_number']/int)" />
或者,为了使其更具可读性,将这些行分开
<xsl:value-of select="entry[string[1]='plan_type']/string[2]" />
<xsl:text>-</xsl:text>
<xsl:value-of select="entry[string[1]='lot_number']/int" />
<xsl:text>-</xsl:text>
<xsl:value-of select="entry[string[1]='plan_number']/int" />
推荐阅读
- r - R工作室停止工作。卸载并重新安装,但无法检测到所有软件包
- python - 了解 shap_values() 函数以确定机器学习模型在做什么
- binary - 如何扩展此二进制乘法器设计
- javascript - 根据选择更改显示的对象
- css - 音乐网站 使用 :hover 显示图标和情人不透明度的问题
- google-apps-script - 如何使用电子表格查找损坏的链接?
- java - 使用@namedquery 更新查询无法正常工作
- python - 调整视频数据的大小以适合 model.predict
- rust - 一些错误无法为“librocksdb-sys v6.11.4”运行自定义构建命令
- reactjs - React-PDF/Rendered 不呈现图像 URL