2011-11-05 19 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 
相關問題