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

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

澄清:我的意思不是执行 HTML DOM 脚本 文档已转换,我也不是指 XSL 转换 发起 通过浏览器中的 JavaScript(例如W3Schools 页面显示的内容)。我指的是转换期间位于 XSL 内的实际脚本块。

有帮助吗?

解决方案

要嵌入 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 中是否有任何等效的功能,但我可以梦想。

其他提示

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

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

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

此外,跨浏览器 JavaScript/XSLT 也是一个令人头疼的问题。 Mozilla 的 JavaScript/XSLT 界面IE的, ,所以你可能想依赖一个独立于浏览器的库,比如 jQuery 的 XSLT.

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

这一页:

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

XSLT 教程:

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

那个网站会比我更有帮助。祝你好运!

我怀疑如果“官方”的意思是“基于标准”,您会发现所需的内容。您所描述的是一种在样式分析过程中解析和执行的用户代理脚本语言。如果您的目标是通过在 Javascript 中完成这些脏活来简化 XSLT,那么您最好尝试在 javascript 中生成 XSLT,然后使用类包装器通过浏览器自己的 XSLT 解析器来解析结果。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top