1

我在 XML 文件中接收坐标数据,格式为 Latitude: 3876570 Longitude:-9013376

我正在使用 XSL 将 Lon/lat 转换为 8 位而不是 7 位(如上所述),因此我需要在上述坐标的末尾附加一个零。即我需要纬度: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不能给你你想要的结果,因为它不能改变它所代表的数字的值。

您可以将该值乘以十(format-number只要您使用 XSLT 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'已经提出。

这是一个更通用的解决方案

此转换在末尾添加了必要零的确切数量,latitude并且longitude对于string-length()小于 8 的任何值:

<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

因此,如果当前节点的值为负数,则上面的表达式再提取一个零 - 以考虑减号并获得我们必须附加到数字的确切数量的零。

于 2012-05-30T02:47:32.847 回答