2011-11-05 18 views
1

我正在尝试为下面的XML创建XSLT。目的是构建以下URL。我试图弄清楚如何通过XSLT循环来创建纬度和经度碎料及然后用&大小完成URL = 300×300 &地图类型=混合&传感器=假” /了当>‘到达结束’。XSLT构建具有多个路径(经度,纬度)参数的Google Maps URL

<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”,“暂停”,“恢复”,或“手动”的类型值。他们总是以一种“开始”,并以一种“结束”结束开始。

<?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

没有提供XML文档。请编辑问题并提供XML文档以及确切需要的转换结果。 –

+0

同时添加了两个。谢谢Dimitre。 –

+0

@_Steven Roth:很好。我取消了我的downvote,实际上是给你+1,现在问题确实有意义。 XSLT解决方案非常简单。 –

回答

0

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

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

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

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

+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 
相关问题