对于其他人来说,我可能面临的问题很简单,但是作为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)" />
但是由于变量超出范围,所以它不起作用。 如何获得所需的输出? 谢谢。
答案 0 :(得分:0)
请注意,变量在声明变量的范围内是局部的,因此在这种情况下,每个变量只能在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" />
答案 1 :(得分:0)
要尽可能少地更改,请尝试以下XSLT-1.0代码:
<xsl:template match="linked-hash-map">
<xsl:variable name="plan_type" select="entry[string='plan_type']/string[2]/text()" />
<xsl:variable name="lot_number" select="entry[string='lot_number']/int/text()" />
<xsl:variable name="plan_number" select="entry[string='plan_number']/int/text()" />
<xsl:value-of select="concat($plan_type, ' - ', $lot_number, ' - ', $plan_number)" />
</xsl:template>
其结果是:
SP - 31 - 108661
答案 2 :(得分:0)
我们没有关于该问题的XSLT版本号,所以我想知道在3.0中会写什么。也许:
<xsl:value-of select="for $n in ('plan_type', 'lot_number', 'plan_number')
return entry[string[1]=$n]/*[2]"
separator=" - "/>