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 > $height">1</xsl:when>
<xsl:when test="$width < $height">0</xsl:when>
</xsl:choose>
</xsl:variable>
<orientation>
<xsl:value-of select="$code"/>
</orientation>
如果宽度大于我期望的高度 1,但我得到 0,反之亦然
比较数字,而不是格式化字符串。您有两个问题导致它比较大于或小于字符串。
- 您正在使用
xsl:value-of
来 select 一个字符串
- 您正在应用
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 > $height">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<orientation>
<xsl:value-of select="$code"/>
</orientation>
</xsl:template>
</xsl:stylesheet>
这有点让我发疯...我有一个 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 > $height">1</xsl:when>
<xsl:when test="$width < $height">0</xsl:when>
</xsl:choose>
</xsl:variable>
<orientation>
<xsl:value-of select="$code"/>
</orientation>
如果宽度大于我期望的高度 1,但我得到 0,反之亦然
比较数字,而不是格式化字符串。您有两个问题导致它比较大于或小于字符串。
- 您正在使用
xsl:value-of
来 select 一个字符串 - 您正在应用
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 > $height">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<orientation>
<xsl:value-of select="$code"/>
</orientation>
</xsl:template>
</xsl:stylesheet>