XSL:在坐标数据中添加一个额外的数字

时间:2012-05-29 23:02:37

标签: xml xslt

我以XML格式接收XML文件中的坐标数据 纬度:3876570 经度:-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位数字。请帮忙!

2 个答案:

答案 0 :(得分:3)

您对format-number的来电无法提供您想要的结果,因为它无法更改其代表的数字值。

您可以将该值乘以10(只要您使用XSLT 1.0就不需要format-number调用)

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

或追加零

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

答案 1 :(得分:-1)

已经提出了明显的答案 - 乘以10或与'0'连接。

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

对于latitude小于8的任何值,此转换会在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

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