2015-02-17 2 views
0

У меня есть проект, где я хочу сделать карту с использованием координат GPS, и я хочу преобразовать координаты в значения XY с помощью Javascript или, по крайней мере, sin и cos. Итак, мой вопрос: как использовать sin и cos в xsl stylesheets. Я использую Internet Explorer для генератора. Пока все работает нормально.Как использовать Javascript Математические функции с XSL

Моя текущая таблица стилей выглядит следующим образом:

<?xml version="1.0"?> 

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:gpx="http://www.topografix.com/GPX/1/1"> 
    <!-- xmlns:msxsl="urn:schemas-microsoft-com:xslt" --> 

<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" /> 

<xsl:variable name="midx" select="800" /> <!-- longitude --> 
<xsl:variable name="midy" select="1100" /> <!-- latitude --> 



<xsl:template name="longitude"> 
    <xsl:param name="lon"/> 
    <xsl:param name="lat"/> 
    <!-- <xsl:value-of select="result:getResult(string(.))"/> --> 
    <xsl:value-of select="($lon - 42.881) * 100000"/> 
</xsl:template> 

<xsl:template name="latitude"> 
    <xsl:param name="lon"/> 
    <xsl:param name="lat"/> 
    <xsl:value-of select="1700 - (($lat - 36.904) * 100000)"/> 
</xsl:template> 

<xsl:template match="/"> 
<xsl:apply-templates select="gpx:gpx"/> 
</xsl:template> 

<xsl:template match="gpx:gpx"> 
<html><body> 
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" > 
<xsl:apply-templates select="gpx:trk"/> 
<xsl:apply-templates select="gpx:wpt"/> 
</svg> 
</body></html> 
</xsl:template> 

<xsl:template match="gpx:wpt"> 
<circle stroke="black" stroke-width="3" fill="red" r="10"> 
    <xsl:attribute name="cx"> 
    <xsl:call-template name="longitude"><xsl:with-param name="lon" select="@lon"/><xsl:with-param name="lat" select="@lat"/></xsl:call-template> 
    <!-- <xsl:value-of select="(@lon - 42.881) * 100000"/> --> 
    </xsl:attribute> 
    <xsl:attribute name="cY"> 
    <xsl:call-template name="latitude"><xsl:with-param name="lon" select="@lon"/><xsl:with-param name="lat" select="@lat"/></xsl:call-template> 
    <!-- <xsl:value-of select="1700 - ((@lat - 36.904) * 100000)"/> --> 
    </xsl:attribute> 
</circle> 
<text> 
    <xsl:attribute name="x"> 
    <xsl:call-template name="longitude"><xsl:with-param name="lon" select="@lon"/><xsl:with-param name="lat" select="@lat"/></xsl:call-template> 
    </xsl:attribute> 
    <xsl:attribute name="y"> 
    <xsl:call-template name="latitude"><xsl:with-param name="lon" select="@lon"/><xsl:with-param name="lat" select="@lat"/></xsl:call-template> 
    </xsl:attribute> 
    <xsl:value-of select="name" /> 
</text> 
</xsl:template> 
<xsl:template match="gpx:trk"> 
    <xsl:apply-templates select="gpx:trkseg"/> 
</xsl:template> 

<xsl:template match="gpx:trkseg"> 
<polyline style="fill:none;stroke:black;stroke-width:1"> 
    <xsl:attribute name="points"> 
    <xsl:for-each select="gpx:trkpt"> 
     <!-- <xsl:value-of select="(@lon - 42.881) * 100000"/>,<xsl:value-of select="1700 - ((@lat - 36.904) * 100000)"/> --> 
     <!-- <trkpt lat="36.91445553" lon="42.89106168"> --> 
     <xsl:call-template name="longitude"><xsl:with-param name="lon" select="@lon"/><xsl:with-param name="lat" select="@lat"/></xsl:call-template> 
     <xsl:text>,</xsl:text> 
     <xsl:call-template name="latitude"><xsl:with-param name="lon" select="@lon"/><xsl:with-param name="lat" select="@lat"/></xsl:call-template> 
     <xsl:text> </xsl:text> 
    </xsl:for-each> 
    </xsl:attribute> 
</polyline> 
</xsl:template> 

</xsl:stylesheet> 
+0

http://stackoverflow.com/help/someone-answers –

ответ

0

EXSLT имеет математический пакет, который включает в себя соз и грех Fuctions (среди прочих).

http://exslt.org/math/

0

Там нет поддержки Javascript в XSLT как таковой. Несколько XSLT-процессоров позволят вам использовать Javascript в качестве расширения - я не знаю, является ли одно из MSIE одним из них.

В любом случае вы можете реализовать функции sin и cos в XSLT 1.0, используя Taylor power series.

3

IE использует MSXML в качестве процессора XSLT и что действительно позволяет использовать VBScript или JavaScript, как язык сценариев для реализации функции расширения, здесь приведен пример использования Javascript:

XML является, например,

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="test2015021701.xsl"?> 
<root> 
    <test>3.141592653589793</test> 
</root> 

XSLT является

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:svg="http://www.w3.org/2000/svg" 
    xmlns:ms="urn:schemas-microsoft-com:xslt" 
    xmlns:mf="http://example.com/mf" 
    exclude-result-prefixes="ms mf"> 

<xsl:output 
    method="xml" 
    version="1.0" 
    indent="yes"/> 

<ms:script language="Javascript" implements-prefix="mf"> 
function sin(n) { 
    return Math.sin(n); 
} 
</ms:script> 

<xsl:template match="/"> 
    <html lang="en"> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <h1>test</h1> 
     <p><xsl:if test="function-available('mf:sin')"> 
      <xsl:value-of select="mf:sin(number(root/test))"/> 
     </xsl:if> 
     </p> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

Обратите внимание, что только объекты, методы и функции, предоставляемые Microsoft JScript scripting engine доступны, нет никакой поддержки для вещей, как DOM, который сам IE реализует.

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