客户端XSL处理中的JavaScript?
是否有可能执行嵌入XML的JavaScript以协助客户端(基于浏览器)XSL转换?它是如何完成的以及它是如何官方的?
Microsoft的XML DOM对象允许在服务器端(即在ASP / ASP.NET中)进行此操作。
澄清:我不是说在转换文档后执行HTML DOM脚本,也不是指在浏览器中由JavaScript启动的XSL转换(例如W3Schools页面显示的内容)。我指的是转换期间位于XSL内的实际脚本块。
解决方案
回答
是的。它取决于浏览器,但是我们可以使用Javascript。 w3schools.com上有一个小而实用的教程。它是XSLT教程的一部分。
这一页:
http://www.w3schools.com/xsl/xsl_client.asp
XSLT教程:
http://www.w3schools.com/xsl/default.asp
该站点将比我自己更有帮助。祝你好运!
回答
我认为我们无法执行嵌入XML文档中的JavaScript代码。就像提到的helios一样,我们可以使用JavaScript执行转换。
在大多数情况下,JavaScript作为CDATA嵌入,通常在XSL转换发生后使用。如果我理解正确,那么我们希望在XML中有一个可执行的<script>标记。
如果需要对转换进行更多控制,则可以使用XSL参数和模板。我们可以在XSLT中设置这些值,然后将它们传递给exec()。 Mozilla支持在XSL中设置参数,但是我不确定其他浏览器。
而且,跨浏览器的JavaScript / XSLT令人不安。 Mozilla的JavaScript / XSLT界面与IE的界面非常不同,因此我们可能希望依赖于独立于浏览器的库,例如jQuery的XSLT。
回答
我怀疑如果"正式"的意思是"基于标准的",我们会找到我们想要的东西。我们所描述的是在样式表解析期间要解析和执行的用户代理脚本语言。如果目的是通过在Javascript中完成肮脏的工作来简化XSLT,那么最好尝试在javascript中生成XSLT,然后使用类包装器通过浏览器自己的XSLT解析器解析结果。
当然,这比我们可能要签署的工作要多得多,但是如果我们确信自己愿意这样做,那么我来看看John Resig的Javascript Micro-Templates,可以在javascript中动态存储模板友好的XSLT。
回答
要嵌入JavaScript以进行转换,可以使用<xsl:script>,但仅限于Microsoft的XML对象实现。这是一个例子:
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中是否有任何等效功能,但是我可以做梦。