XSLT для создания Google Maps URL с несколькими параметрами пути (долгота, широта) - PullRequest
1 голос
/ 05 ноября 2011

Я пытаюсь создать XSLT для XML ниже.Цель состоит в том, чтобы создать следующий URL.Я пытаюсь выяснить, как пройти через XSLT, чтобы создать широту, долготу |после того, как достигнут конец, и завершите URL-адрес & 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". Они всегда начинаются с типа "start" и заканчиваются типом "end".

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

Результат будетbe ..

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 ]

1 голос
/ 05 ноября 2011

Это преобразование:

<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
0 голосов
/ 05 ноября 2011

Как указал @Dimitre, исходные данные, которые вы показываете, не являются XML, а выглядят как фрагмент JSON.

У вас действительно были какие-то исходные данные XML? или вам нужно обработать JSON?

Если последнее, почему вы пытаетесь использовать XSLT? Похоже, пытаясь использовать отвертку, чтобы вбить гвоздь. Если вы должны использовать XSLT, вы можете попробовать этот ответ: XSLT-эквивалент для JSON

Но для генерации ряда параметров URL на основе ввода JSON такой язык, как Javascript, кажется гораздо более подходящим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...