1

緯度:3876570経度:-9013376の形式でXMLファイルの座標データを受け取ります

XSLを使用してLon/latを7桁ではなく8桁に変換しているので(上記のように)、上記の座標の最後にゼロを追加する必要があります。つまり、緯度:38765700経度:-90133760が必要です

format-number()関数を使用しようとしていますが、正しく使用しているかどうかわかりません。私は試した

<xsl:value-of select='format-number(longitude, "########")'/>

 <xsl:value-of select='format-number(longitude, "#######0")'/>  

私は7桁自体を取得することになります。助けてください!

4

2 に答える 2

3

への呼び出しformat-numberは、それが表す数値の値を変更できないため、必要な結果を得ることができません。

値に 10 を掛けることもできます ( format-numberXSLT 1.0 を使用している限り、呼び出す必要はありません)。

<xsl:value-of select="longitude * 10" />  

またはゼロを追加

<xsl:value-of select="concat(longitude, '0')" />  
于 2012-05-29T23:41:45.560 に答える
-1

明白な答え - 10 を掛けるか、または a で連結すること'0'は既に提案されました。

より一般的な解決策は次のとおりです。

この変換は、 8 未満の任意の値の最後にlatitude、必要なゼロの正確な数を追加します。longitudestring-length()

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="
 *[self::latitude or self::longitude
 and
   not(string-length() >= 8)
 or
  (starts-with(., '-') and not(string-length() >= 9))
  ]">

  <xsl:copy>
   <xsl:value-of select=
    "concat(.,
            substring('00000000',
                      1,
                      8 + starts-with(., '-') - string-length())
           )
    "/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

この XML ドキュメントに適用すると:

<coordinates>
 <latitude>3876570</latitude>
 <longitude>-9013376</longitude>
</coordinates>

必要な正しい結果が生成されます。

<coordinates>
   <latitude>38765700</latitude>
   <longitude>-90133760</longitude>
</coordinates>

この XML ドキュメントに適用した場合:

<coordinates>
 <latitude>123</latitude>
 <longitude>-99</longitude>
</coordinates>

ここでも、必要な正しい結果が生成されます。

<coordinates>
   <latitude>12300000</latitude>
   <longitude>-99000000</longitude>
</coordinates>

注意してください:

式では:

substring('00000000',
          1,
          8 + starts-with(., '-') - string-length())

ブール値が算術演算子の引数である場合は常に、次の規則を使用して数値に変換されるという事実を使用します。

   number(true()) = 1

   number(false()) = 0

したがって、上記の式は、現在のノードの値が負の場合にもう 1 つゼロを抽出します。これは、マイナス記号を考慮して、数値に追加する必要があるゼロの正確な数を取得するためです。

于 2012-05-30T02:47:32.847 に答える