3

InDesign のリストを並べ替える xslt ファイルを作成しようとしています。

私が抱えている問題は、サイズがメトリックではなくインペリアルである場合に、リストを期待どおりに並べ替えようとしていることです。もう少し複雑なことに、サイズ情報は文字列に含まれています。

ここに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).

私はそれを最初の数字に分離しようとしました(つまり、「ジョイント」と「」の間)。それは、最初の数字に分数がない場合にのみ実際に機能しました。

私の他の考えは、xsltで分数を小数に変換することは可能でしょうか?

XSLTを使用してこれをソートするにはどうすればよいでしょうか?

4

1 に答える 1