gpt4 book ai didi

javascript - 将 javascript 变量传递给 xsl 条件

转载 作者:行者123 更新时间:2023-11-28 15:50:24 26 4
gpt4 key购买 nike

我想知道是否可以在 xsl 条件中包含“外部”变量(在我的例子中为 javascript)。

在我的示例中,我使用一些 javascript 获取 map 上的坐标,即我的 xMax var。我想在“xsl:if”中使用这个 xMax 变量来查找纬度低于或等于 xMax 的所有“条目”。

我的脚本摘录:

var cpt = 0;
var xMax = map.getBounds().getNorthEast().lat();

<xsl:for-each select="entries/entry">
<xsl:if test="latitude &lt;= xMax">
cpt++;
</xsl:if>
</xsl:for-each>
alert(cpt);

我找到了“msxsl:script”元素,我尝试了这个:

<msxsl:script language="JScript" implements-prefix="user">
function getXMax(){
var xMax = map.getBounds().getNorthEast().lat();
return xMax;
}
</msxsl:script>

并用以下方式调用它:

<xsl:value-of select='user:getXMax(.)'/>

但似乎不起作用。(我还包括了

xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://localhost:8080/Projet/map"

在 xsl:stylesheet 中)

如果有人知道如何将我的 js var 传递到条件中或如何将 js var 解析为 xslt var,感谢您的帮助!

最佳答案

按照您希望的方式混合 JavaScript 和 XSLT 是不可能的。

如果使用 XSLT 将 XML 转换为 HTML 和 JavaScript,则此时生成的 JavaScript 实际上并未执行。就 XSLT 而言,它只是输出一串字符,该字符串稍后将被(由浏览器)解析为 JavaScript。当浏览器开始处理 JavaScript 时,XSLT 将早已被遗忘。它的处理方式与您自己在记事本中输入 JavaScript 没有什么不同。

正如您所展示的,您可以在 XSLT 中使用 JavaScript 函数,但这与您输出的 JavaScript 完全独立,并且只能由 XSLT 在执行过程中使用。

因此,您需要采用稍微不同的方法。您可以通过 JavaScript 执行 XSLT 转换,并为此 XSLT 转换传递参数。但是,这可能不一定是理想的方法。

您可以采取的一种方法是将相关 XML(entry 元素)输出为 JSON,然后您可以在 JavaScript 中访问它。因此,纬度值小于xMax变量的逻辑完全在 JavaScript 中检查。

例如,您的 XSLT 可能如下所示...

<script>
var cpt = 0;
var xMax = map.getBounds().getNorthEast().lat();

var coordinates = [
<xsl:for-each select="entries/entry">
<xsl:if test="position() > 1">,</xsl:if>
{
"lat":<xsl:value-of select="latitude" />,
"long":<xsl:value-of select="longitude" />
}
</xsl:for-each>
];
for (var i = 0; i &lt; coordinates.length; i++)
{
if (coordinates[i].lat &lt; xMax)
cpt++;
}
alert(cpt);
</script>

然后,给定这个 XML

<entries>
<entry>
<latitude>1</latitude>
<longitude>2</longitude>
</entry>
<entry>
<latitude>3</latitude>
<longitude>4</longitude>
</entry>
</entries>

这会生成看起来像这样的 JavaScript

<script>
var cpt = 0;
var xMax = map.getBounds().getNorthEast().lat();

var coordinates = [
{
"lat":1,
"long":2
}
,
{
"lat":3,
"long":4
}
];
for (var i = 0; i < coordinates.length; i++)
{
if (coordinates[i].lat < xMax)
cpt++;
}
alert(cpt);
</script>

关于javascript - 将 javascript 变量传递给 xsl 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com