如何从三个节点中获取2个最低节点

时间:2015-05-18 08:40:33

标签: xml xslt

我需要计算一个等于2 *最低二维的值。

<VALUES>
    <LENGTH>10</LENGTH>
    <WIDTH>12</WIDTH>
    <HEIGHT>11</HEIGHT>
</VALUES>

所以在上面的例子中,我们需要GIRTH = 2 *(LENGTH + HEIGHT)= 44。

导致新的XML如下所示(请注意,输入和输出已经简化)

<RESULT>
    <LENGTH>10</LENGTH>
    <WIDTH>12</WIDTH>
    <HEIGHT>11</HEIGHT>
    <GIRTH>44</GIRTH>
</RESULT>

如何才能获得最低的两个最干净的方法? (我的情况是,LENGTH和HEIGHT,但它可能是三个中的任何两个)

我宁愿不使用3 if语句来覆盖3种可能性,我试图避免使用C#帮助程序来处理我不能找到的所有内容。

另外,我在BIZTALK2010中使用它,我不确定它是xslt 1还是xslt 2.

2 个答案:

答案 0 :(得分:1)

解决方案如下所示:

fetch

答案 1 :(得分:1)

  

它意味着用作计算GIRTH的方法,即2   最短尺寸

假设GIRTH按照here解释的方式计算,我会这样做:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:strip-space elements="*"/>

<xsl:template match="/VALUES">
    <xsl:variable name="sorted-dimensions">
        <xsl:for-each select="*">
            <xsl:sort select="." order="ascending" data-type="number"/>
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </xsl:variable>
    <girth>
        <xsl:value-of select="2 * sum(exsl:node-set($sorted-dimensions)/*[position()!=3])"/>
    </girth>
</xsl:template>

</xsl:stylesheet>

假设VALUES下只有3个维度。

如果你想直接跳到第3步,你可以这样做:

<measurement>
    <xsl:value-of select="2 * sum(exsl:node-set($sorted-dimensions)/*[position()!=3]) + exsl:node-set($sorted-dimensions)/*[3]"/>
</measurement>