是否可以执行嵌入XML的JavaScript来协助客户端(基于浏览器的)XSL转换?它是如何完成的以及它是如何正式的?
Microsoft的XML DOM对象允许在服务器端(即在ASP / ASP.NET中)。
澄清:我并不是指在文档转换后执行的HTML DOM脚本编写,也不是指浏览器中的JavaScript 启动 (例如W3Schools页面显示)。我指的是转换期间位于XSL内的实际脚本块。
答案 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 interface与IE'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。