Первый пример :
Оценка следующего выражения XPath 1.0:
normalize-space(translate(.,translate(.,' 0123456789.', ''), ' '))
производит :
44.799439 20.483494
Это может быть сделано с любым механизмом XPath, и узел контекста должен быть узлом документа или в XSLT 1.0, как показано ниже :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:value-of select=
"normalize-space(translate(.,translate(.,' 0123456789.', ''), ' '))
"/>
</xsl:template>
</xsl:stylesheet>
При применении к этомуXML-документ (такой же, как предоставленный, но завершенный):
<html>
<div id="g_map"></div>
<script src="http://maps.google.com/maps?file=api&v=2&key=key" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var html = '';
var lat = 44.799439;
var lang = 20.483494;
if (GBrowserIsCompatible())
{}
]]>
</script>
</html>
результат :
44.799439 20.483494
Второй пример:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="//*/@src">
<xsl:value-of select=
"normalize-space(translate(.,translate(.,' 0123456789.', ''), ' '))
"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
производит :
..44.7984820.473856
и требует чуть больше очистки.
II.Более серьезная обработка (XPath 2.0 / XSLT 2.0)
Это преобразование действительно "универсально" и работает на обоих примерах :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:analyze-string select="string-join((.,//*/@*), ' ')"
regex="\-?\d+\.\d+">
<xsl:matching-substring>
<xsl:sequence select="concat(., ' ')"/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
При применении ко второму XML :
<div class="map">
<iframe frameborder="0" border="0" scrolling="no" marginwidth="0"
marginheight="0" title=""
src="http://www.kolektiva.rs/beograd/dailydeal/vendor/map/center/44.79848,20.473856/">
</iframe>
желаемый, правильный результат получается :
44.79848 20.473856
при применении к XMLдля первого примера он также дает желаемый результат :
44.799439 20.483494