客户端XSL处理中的JavaScript?

时间:2008-09-15 19:33:40

标签: javascript xslt browser

是否可以执行嵌入XML的JavaScript来协助客户端(基于浏览器的)XSL转换?它是如何完成的以及它是如何正式的?

Microsoft的XML DOM对象允许在服务器端(即在ASP / ASP.NET中)。

澄清:我并不是指在文档转换后执行的HTML DOM脚本编写,也不是指浏览器中的JavaScript 启动 (例如W3Schools页面显示)。我指的是转换期间位于XSL内的实际脚本块。

4 个答案:

答案 0 :(得分:4)

要嵌入JavaScript以帮助转换,您可以使用< xsl:script>,但it is limited使用Microsoft的XML对象实现。这是一个example

<强> scripted.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="scripted.xsl"?>
<data a="v">
    ding dong
</data>

<强> scripted.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:script implements-prefix="local" language="JScript"><![CDATA[

    function Title()
    {
        return "Scripted";
    }

    function Body(text)
    {
        return "/" + text + "/";
    }

]]></xsl:script>
<head>
    <title><xsl:eval>Title()</xsl:eval></title>
</head>
<body>
    <xsl:for-each select="/data"><xsl:eval>Body(nodeTypedValue)</xsl:eval></xsl:for-each>
</body>
</html>

Internet Explorer中的结果(或者如果您只使用COM / .NET中的MSXML)是:

<html>
<head>
    <title>Scripted</titlte>
</head>
<body>
    /ding dong/
</body>
</html>

它似乎不支持通常的XSL模板构造,并且添加根节点会导致MSXML进入某种标准模式,在此模式下它将无法工作。

我不确定标准XSL中是否有任何等效功能,但我可以梦想。

答案 1 :(得分:2)

我认为您不能执行嵌入在XML文档中的JavaScript代码。就像helios提到的那样,你可以使用JavaScript预先形成转换。

在大多数情况下,JavaScript作为CDATA嵌入,通常在之后使用进行XSL转换。如果我理解正确,你想要一个可执行文件&lt; script&gt; XML中的标记。

如果需要对转换进行更多控制,可以使用XSL参数和模板。您可以在XSLT中设置这些值,然后将它们传递给exec()。 Mozilla在XSL中支持setting parameters,但我不确定其他浏览器。

此外,跨浏览器JavaScript / XSLT是一个痛苦的问题。 Mozilla's JavaScript/XSLT interfaceIE's非常不同,因此您可能希望依赖与jQuery's XSLT等浏览器无关的库。

答案 2 :(得分:1)

是。它取决于浏览器,但您可以使用Javascript。 w3schools.com上有一个小而实用的教程。它是XSLT教程的一部分。

页面:

http://www.w3schools.com/xsl/xsl_client.asp

XSLT教程:

http://www.w3schools.com/xsl/default.asp

该网站比我自己更有帮助。祝你好运!

答案 3 :(得分:1)

如果“官方”的意思是“以标准为基础”,我怀疑你会找到你想要的东西。您描述的是在样式表解析期间要解析和执行的用户代理脚本语言。如果您的目标是通过在Javascript中执行脏工作来简化XSLT,那么最好尝试在javascript中生成XSLT,然后使用类包装器通过浏览器自己的XSLT解析器解析结果。

这当然比你可能签署的工作要多得多,但是如果你确信你想这样做,我会看一下John Resig's Javascript Micro-Templates来动态存储模板友好的XSLT。的JavaScript。