2

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

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

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

4

4 回答 4

4

要嵌入 JavaScript 以帮助转换,您可以使用 <xsl:script>,但它仅限于 Microsoft 的 XML 对象实现。这是一个例子

脚本化的.xml

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

脚本化的.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 中是否有任何等效功能,但我可以梦想。

于 2008-09-16T17:31:36.607 回答
2

我不认为您可以执行嵌入在 XML 文档中的 JavaScript 代码。就像 helios 提到的,您可以使用 JavaScript 执行转换。

JavaScript 在大多数情况下作为 CDATA 嵌入,通常XSL 转换发生后使用。如果我理解正确,您希望在您的 XML 中有一个可执行的 <script> 标记。

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

此外,跨浏览器的 JavaScript/XSLT 也令人头疼。Mozilla 的 JavaScript/XSLT 接口与IE 的接口非常不同,因此您可能希望依赖于独立于浏览器的库,例如jQuery 的 XSLT

于 2008-09-15T20:28:06.770 回答
1

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

这页纸:

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

XSLT 教程:

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

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

于 2008-09-15T19:38:15.143 回答
1

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

这当然比您可能签署的工作要多得多,但是如果您确信自己想要这样做,我会看看John Resig 的 Javascript Micro-Templates以在您的 javascript 中动态存储模板友好的 XSLT。

于 2008-09-15T20:29:44.177 回答