我有一个项目,我想使用GPS坐标制作地图,我想使用Javascript或至少sin和cos将坐标转换为XY值。所以,我的问题是,如何在xsl样式表中使用sin和cos。我正在使用Internet Explorer作为生成器。到目前为止一切正常。
我当前的样式表如下所示:
<?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 :(得分: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提供的对象,方法和函数可用,不支持IE本身实现的DOM之类的东西。
答案 1 :(得分:0)
exslt 有一个数学包,其中包括cos和sin函数(等等)。
答案 2 :(得分:0)
在XSLT中不支持Javascript。一些XSLT处理器允许您使用Javascript作为扩展 - 我不知道MSIE中的那个是否是其中之一。
在任何情况下,您都可以使用Taylor power series在XSLT 1.0中实现sin和cos函数。