XSLT用于构建具有多个路径(经度,纬度)参数的Google Maps URL

时间:2011-11-05 00:51:10

标签: xml xslt

我正在尝试在下面创建一个XML的XSLT。目的是构建以下URL。我试图找出如何循环通过XSLT以创建纬度,经度| parings然后在达到“end”时用& size = 300x300& maptype = hybrid& sensor = false“/>完成网址。

<img alt="" src="http://maps.googleapis.com/maps/api/staticmap?
  path=color:0x0000ff|weight:5|42.312620297384676,-70.95182336425782
  |42.31230294498018,-70.95255292510987
  &amp;size=300x300&amp;maptype=hybrid&amp;sensor=false" />

可以有许多时间戳参数,但它们的类型值都是“gps”,“pause”,“resume”或“manual”。它们总是以“开始”类型开头,以“结束”类型结束。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root type="object">
  <path type="array">
    <item type="object">
      <timestamp type="number">0</timestamp>
      <altitude type="number">274.1666666666667</altitude>
      <longitude type="number">-84.387467</longitude>
      <latitude type="number">33.877038</latitude>
      <type type="string">start</type>
    </item>
    <item type="object">
      <timestamp type="number">3548.7729999999997</timestamp>
      <altitude type="number">269.2857142857143</altitude>
      <longitude type="number">-84.387616</longitude>
      <latitude type="number">33.876494</latitude>
      <type type="string">manual</type>
    </item>
    <item type="object">
      <timestamp type="number">3600</timestamp>
      <altitude type="number">270.8333333333333</altitude>
      <longitude type="number">-84.387498</longitude>
      <latitude type="number">33.877011</latitude>
      <type type="string">end</type>
    </item>
  </path>
  <calories type="array">
  </calories>
  <total_calories type="number">259</total_calories>
</root>

结果将是......

http://maps.googleapis.com/maps/api/staticmap?path=color:0x0000ff|weight:5|33.877038,-84.387467|33.876494,-84.387616|33.877011,-84.387498&size=300x300&maptype=hybrid&sensor=false

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

此转化:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrlHead" select=
 "'http://maps.googleapis.com/maps/api/staticmap?path=color:0x0000ff|weight:5'"/>

 <xsl:param name="pUrlTail" select=
 "'&amp;size=300x300&amp;maptype=hybrid&amp;sensor=false'"/>

 <xsl:template match="/*/path">
     <xsl:copy-of select="$pUrlHead"/>
     <xsl:apply-templates select="item[@type='object']"/>
     <xsl:copy-of select="$pUrlTail"/>
 </xsl:template>

 <xsl:template match="item">
  <xsl:value-of select="concat('|', latitude, ',', longitude)"/>
 </xsl:template>

 <xsl:template match="/*/*[not(self::path)]"/>
</xsl:stylesheet>

应用于提供的XML文档

<root type="object">
  <path type="array">
    <item type="object">
      <timestamp type="number">0</timestamp>
      <altitude type="number">274.1666666666667</altitude>
      <longitude type="number">-84.387467</longitude>
      <latitude type="number">33.877038</latitude>
      <type type="string">start</type>
    </item>
    <item type="object">
      <timestamp type="number">3548.7729999999997</timestamp>
      <altitude type="number">269.2857142857143</altitude>
      <longitude type="number">-84.387616</longitude>
      <latitude type="number">33.876494</latitude>
      <type type="string">manual</type>
    </item>
    <item type="object">
      <timestamp type="number">3600</timestamp>
      <altitude type="number">270.8333333333333</altitude>
      <longitude type="number">-84.387498</longitude>
      <latitude type="number">33.877011</latitude>
      <type type="string">end</type>
    </item>
  </path>
  <calories type="array">
  </calories>
  <total_calories type="number">259</total_calories>
</root>

生成想要的正确结果

http://maps.googleapis.com/maps/api/staticmap?path=color:0x0000ff|weight:5|33.877038,-84.387467|33.876494,-84.387616|33.877011,-84.387498&size=300x300&maptype=hybrid&sensor=false259

答案 1 :(得分:0)

正如@Dimitre指出的那样,您显示的源数据不是XML,而是看起来像JSON的片段。

你真的有一些XML源数据吗?或者你需要处理JSON吗?

如果是后者,为什么要尝试使用XSLT?似乎想用螺丝刀来钉钉子。如果您必须使用XSLT,可以尝试以下答案:XSLT equivalent for JSON

但是要基于JSON输入生成一系列URL参数,像Javascript这样的语言似乎更合适。