2016-03-27 2 views
0

в HTML У меня есть ссылка выглядит как:XSLT - получить лат и долго от Google Map URL

<a href="http://maps.apple.com/?ll=-23.590877,-46.689397&address=JK%20Iguatemi%20Avenida%20Presidente%20Juscelino%20Kubitschek,%202041,%20Itaim%20Bibi,%20São%20Paulo%20-%20SP,%2004543-011,%20Brésil" class="setItineraire">Discover</a> 

Как я могу взять лат и длинные (-23,590877 и -46,689397) из этого URL и назначить их к элементам

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

Это первый случай, когда я сталкиваюсь с такими ситуациями.

Благодаря

+1

Один пример не устанавливает правила. –

+1

Кроме того, вход не является XML (содержит неэкранированный амперсанд). –

+0

Да, [вам следует избегать ваших URI] (https://unspecified.wordpress.com/2011/06/02/you-should-xml-escape-your-uris/). Если ваш XSLT-процессор не обманывает, вы можете посмотреть на строковые функции XSLT. – usr2564301

ответ

1

Предполагая, что ваш HTML также хорошо сформированный XML (и поэтому & символов Спасшись в неанализируемом тексте как &amp;, а затем, если вы используете XSLT 1.0, вам нужно будет сделать это с некоторой строкой манипуляция.

Сначала извлечь строку запроса из атрибута href.

<xsl:variable name="qs" select="concat('&amp;', substring-after(@href, '?'), '&amp;')" /> 

Обратите внимание, я добавление & в начало и конец строки для мак e легче извлечь параметры в следующем бите.

Чтобы извлечь значение параметра ll, то вы делаете это (дополнительные амперсанды убедиться, что он находит только ll=1,2 и не all=1,2.

<xsl:variable name="ll" select="substring-before(substring-after($qs, '&amp;ll='), '&amp;')" /> 

Это должно вернуть «-23.590877, -46,689397», чтобы получить широта (или долгота), вы можете просто сделать это

<latitude><xsl:value-of select="substring-before($ll, ',')" /></latitude> 

Попробуйте этот шаблон

<xsl:template match="a"> 
    <xsl:variable name="qs" select="concat('&amp;', substring-after(@href, '?'), '&amp;')" /> 
    <xsl:variable name="ll" select="substring-before(substring-after($qs, '&amp;ll='), '&amp;')" /> 
    <position> 
     <latitude><xsl:value-of select="substring-before($ll, ',')" /></latitude> 
     <longitude><xsl:value-of select="substring-after($ll, ',')" /></longitude>   
    </position> 
</xsl:template> 

Обратите внимание, что если вы используете XSLT 2.0, можно упростить вещи немного, с помощью функции tokenize

<xsl:variable name="ll" select="tokenize(substring-after(@href, '?'), '&amp;')[starts-with(., 'll=')]" /> 
+0

Спасибо за этот хороший ответ – Zeta

Смежные вопросы