XSLT 大于/小于向后工作...?

XSLT greater than / less than working backwords...?

这有点让我发疯...我有一个 xslt 正在传递基于 choose/when 的值...它可以工作,但问题是它正在向后工作。除非我以错误的方式思考方程式...这是 XML...

的一部分
<LayoutIntent Class="Intent" Status="Available" ID="id00010">
         <FinishedDimensions DataType="ShapeSpan" Preferred="867.330708661417 498.897637795276 0.0"/>
</LayoutIntent>

这里是 xslt 部分...

<xsl:variable name="width">
    <xsl:value-of select="format-number(number(substring(ResourcePool/LayoutIntent/FinishedDimensions/@Preferred,1,16))div 72,'#.##')"/>
</xsl:variable>
<xsl:variable name="height">
    <xsl:value-of select="format-number(number(substring(ResourcePool/LayoutIntent/FinishedDimensions/@Preferred,18,16))div 72,'#.##')"/>
</xsl:variable>
<finishedWidth>
    <xsl:value-of select="$width"/>
</finishedWidth>
<finishedHeight>
    <xsl:value-of select="$height"/>
</finishedHeight>
<xsl:variable name="code">
    <xsl:choose>
        <xsl:when test="$width &gt; $height">1</xsl:when>
        <xsl:when test="$width &lt; $height">0</xsl:when>
    </xsl:choose>
</xsl:variable>
<orientation>
    <xsl:value-of select="$code"/>
</orientation>

如果宽度大于我期望的高度 1,但我得到 0,反之亦然

比较数字,而不是格式化字符串。您有两个问题导致它比较大于或小于字符串。

  1. 您正在使用 xsl:value-of 来 select 一个字符串
  2. 您正在应用 format-number() 生成字符串

删除 value-of 并使变量 select 成为除法的数字乘积,然后将 format-number() 向下移动到要打印格式化数字的位置。

您可能会考虑将第二个 xsl:where 更改为 xsl:otherwise。如果它是一个或另一个,则重复相反的逻辑是没有意义的。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" indent="yes"/>
    
    <xsl:template match="/">    
        
        <xsl:variable name="width" as="item()" select="number(substring(ResourcePool/LayoutIntent/FinishedDimensions/@Preferred,1,16))div 72"/>
        <xsl:variable name="height" as="item()" select="number(substring(ResourcePool/LayoutIntent/FinishedDimensions/@Preferred,18,16))div 72"/>

    <finishedWidth>
        <xsl:value-of select="format-number($width,'#.##')"/>
    </finishedWidth>
    <finishedHeight>
        <xsl:value-of select="format-number($height,'#.##')"/>
    </finishedHeight>
    <xsl:variable name="code">
        <xsl:choose>
            <xsl:when test="$width &gt; $height">1</xsl:when>
            <xsl:otherwise>0</xsl:otherwise>
        </xsl:choose>
    </xsl:variable>
    <orientation>
        <xsl:value-of select="$code"/>
    </orientation>
    </xsl:template>
    
</xsl:stylesheet>