Предполагая, что ваш HTML также хорошо сформированный XML (и поэтому &
символов Спасшись в неанализируемом тексте как &
, а затем, если вы используете XSLT 1.0, вам нужно будет сделать это с некоторой строкой манипуляция.
Сначала извлечь строку запроса из атрибута href
.
<xsl:variable name="qs" select="concat('&', substring-after(@href, '?'), '&')" />
Обратите внимание, я добавление &
в начало и конец строки для мак e легче извлечь параметры в следующем бите.
Чтобы извлечь значение параметра ll
, то вы делаете это (дополнительные амперсанды убедиться, что он находит только ll=1,2
и не all=1,2
.
<xsl:variable name="ll" select="substring-before(substring-after($qs, '&ll='), '&')" />
Это должно вернуть «-23.590877, -46,689397», чтобы получить широта (или долгота), вы можете просто сделать это
<latitude><xsl:value-of select="substring-before($ll, ',')" /></latitude>
Попробуйте этот шаблон
<xsl:template match="a">
<xsl:variable name="qs" select="concat('&', substring-after(@href, '?'), '&')" />
<xsl:variable name="ll" select="substring-before(substring-after($qs, '&ll='), '&')" />
<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, '?'), '&')[starts-with(., 'll=')]" />
Один пример не устанавливает правила. –
Кроме того, вход не является XML (содержит неэкранированный амперсанд). –
Да, [вам следует избегать ваших URI] (https://unspecified.wordpress.com/2011/06/02/you-should-xml-escape-your-uris/). Если ваш XSLT-процессор не обманывает, вы можете посмотреть на строковые функции XSLT. – usr2564301