我正在尝试制作一个 xslt 文件来对 InDesign 列表进行排序。
我遇到的问题是试图让列表在大小为英制而不是公制时按预期排序。为了使事情更复杂一点,大小信息包含在一个字符串中。
这是xslt:
<CATEGORY>
<VERS>
<xsl:for-each select="VFPData/g_otemp/prodid">
<xsl:sort select="floor(translate(../desc,$vDigits,''))" />
<xsl:sort select="translate(../desc,$vAlpha,'')" data-type="number"/>
<xsl:if test="../inactive != 'true'">
<code><xsl:value-of select="../prodid" /></code>
<name><xsl:value-of select="../desc" /></name>
<xsl:if test="../priceout != '0.0000'">
<price><xsl:value-of select="format-number(../priceout, '£0.00')" /></price>
</xsl:if>
<xsl:if test="../priceout = '0.0000'">
<price>P.O.A</price>
</xsl:if>
</xsl:if>
</xsl:for-each>
</VERS>
</CATEGORY>
在处理公制尺寸时效果很好,但是对于英制,您会看到如下排序:
<VERS>
<code>BM50-100</code>
<name>Blue-Max Joint 16" x 12" x 1"</name>
<price>£31.82</price>
<code>BM50-106</code>
<name>Blue-Max Joint 11" x 8 1/2" x 1"</name>
<price>£24.33</price>
<code>BM50-123</code>
<name>Blue-Max Joint 2 1/2" x 2" x 1/2"</name>
<price>£7.42</price>
<code>BM50-133</code>
<name>Blue-Max Joint 2 3/4" x 2" x 1/2"</name>
</VERS>
它应该在哪里:
<VERS>
<code>BM50-123</code>
<name>Blue-Max Joint 2 1/2" x 2" x 1/2"</name>
<price>£7.42</price>
<code>BM50-133</code>
<name>Blue-Max Joint 2 3/4" x 2" x 1/2"</name>
<code>BM50-106</code>
<name>Blue-Max Joint 11" x 8 1/2" x 1"</name>
<price>£24.33</price>
<code>BM50-100</code>
<name>Blue-Max Joint 16" x 12" x 1"</name>
<price>£31.82</price>
</VERS>
据推测,这是因为它排序的值是字符串中所有数字的组合,这意味着 '2 3/4" x 2" x 1/2"' = 234212 使其确实大于 '16" x 12 "×1"' (16121)。
我试图将它隔离到第一个数字(所以在 'Joint' 和 '"' 之间)并且只有在第一个数字没有分数的情况下才真正起作用。
我的另一个想法是可以让 xslt 将分数转换为小数吗?
我到底将如何使用 XSLT 对它进行排序?