是否可以执行嵌入 XML 的 JavaScript 来协助客户端(基于浏览器)的 XSL 转换?它是如何完成的,它是如何官方的?
Microsoft 的 XML DOM 对象在服务器端(即在 ASP/ASP.NET 中)允许这样做。
澄清:我不是指在文档转换之后执行的 HTML DOM 脚本,也不是指由浏览器中的 JavaScript启动的 XSL 转换(例如 W3Schools 页面显示的内容)。我指的是转换期间位于 XSL 中的实际脚本块。
是否可以执行嵌入 XML 的 JavaScript 来协助客户端(基于浏览器)的 XSL 转换?它是如何完成的,它是如何官方的?
Microsoft 的 XML DOM 对象在服务器端(即在 ASP/ASP.NET 中)允许这样做。
澄清:我不是指在文档转换之后执行的 HTML DOM 脚本,也不是指由浏览器中的 JavaScript启动的 XSL 转换(例如 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 Micro-Templates以在您的 javascript 中动态存储模板友好的 XSLT。