2014-09-05 65 views
0

新手/初学者XSL用户在这里。将<xsl:value-of>的结果乘以-1

我有类似下面的模板我的XSLT文件:

<xsl:template name="getpoint"> <xsl:param name="nodenum"/> <xsl:value-of select="//nodeCoord[nodeNumber=$nodenum]/nodeXCoord"/> <xsl:text>,</xsl:text> <xsl:value-of select="//nodeCoord[nodeNumber=$nodenum]/nodeYCoord"/> </xsl:template>

完整的XSLT文件被用来生成SVG图形。但是,我希望翻转浏览器的Y坐标系统,因为我的源数据假定为传统的坐标系统。

我的问题很简单:如何将nodeYCoord乘以-1并将结果发送到浏览器而不是<xsl:value-of>元素产生的值?

编辑:请不要提供关于如何翻转Y坐标系的替代方法。我研究了这一点,对于我的具体应用,我非常确定这是最好的方式去做(假设我可以使它工作)。

回答

1

我的问题,如果很简单:我怎么乘nodeYCoord -1和 有结果发送到浏览器而不是由 <xsl:value-of>元素产生的值?

而且答案也非常简单:使用减号。相反的:

<xsl:value-of select="//nodeCoord[nodeNumber=$nodenum]/nodeYCoord"/> 

写:

<xsl:value-of select="-//nodeCoord[nodeNumber=$nodenum]/nodeYCoord"/> 

请不要提供关于如何翻转与Y 坐标系统的替代方法。我已经研究过这个,对于我的具体的 应用程序,我非常确定这是最好的方法去做它 (假设我可以使它工作)。

也许你应该再看看它。

+0

添加负号是我尝试的第一件事。它在Internet Explorer中不起作用。图像呈现完美而没有否定,但是当我添加它时根本不呈现。这些文件存储在本地,所以我不能在Chrome中进行转换,因为它不允许本地XSL转换。 我很想听听你翻转Y的另一个想法。尽管我尝试了大约5种不同的方式,但在这种情况下它们都不起作用。 – 2014-09-06 00:06:27

+0

迈克尔:我在本地主机上设置了IIS,并且这样做可以在Chrome中工作!非常感谢。但是需要永久渲染 - 比Internet Explorer长得多。虽然比没有好。 – 2014-09-06 00:23:45

+1

@RickTeachey ** 1。**我不明白为什么这不会普遍适用,但以防万一,''应该做同样的事情。 ** 2 **这与速度无关。但是使用''''可能会:在XSLT中,明确写出完整的路径是值得的。 ** 3。**不确定“这种情况”是什么。看看这是否可以提供帮助:http://stackoverflow.com/questions/25108217/using-xslt-to-create-svg/25108778#25108778 – 2014-09-06 00:45:33

0

您的值保存到一个变量,然后在XPath表达式中使用它

<xsl:variable name="yval" select="//nodeCoord[nodeNumber=$nodenum]/nodeYCoord/text()"/> 
<xsl:value-of select="-1 * $yval"/> 
+0

太棒了!不知道你能做到这一点。谢谢你。 – 2014-09-05 23:34:01

+0

快速的问题:这个变量可以被“重用”吗?我将要做几千次相同的任务。 – 2014-09-05 23:35:37

+0

您可以在整个模板中重新引用变量,或者使用表达式构造新变量。在XSLT中,您不能将值重新分配给变量。 – terrywb 2014-09-05 23:38:43