[英]Problems mixing javascript and jquery with XSL transformations, or something with function parameters?
[英]XSL parameters using JavaScript
我有一个HTML页面,例如:
<html>
<head>
<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}
function displayResult()
{
xml=loadXMLDoc("1.xml");
xsl=loadXMLDoc("2.xsl");
// code for IE
if (window.ActiveXObject)
{
xml.addParameter("rss", test);
ex=xml.transformNode(xsl);
document.getElementById("example").innerHTML=ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml,document);
document.getElementById("example").appendChild(resultDocument);
}
}
</script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>
现在,我想将变量(javascript)传递给XSL,例如“ course_name”,以便在XSL中像
<xsl:param name="course_name" />
<xsl:value-of select="$course_name" />
非常感谢您提供解决此问题的方法的帮助。
您可以这样做:
xsltProcessor.setParameter(null, "course_name", "whatever the name is");
对于IE,您需要按照http://msdn.microsoft.com/zh-CN/library/windows/desktop/ms762312%28v=vs.85%29.aspx更改代码,但命令是:
xslproc.addParameter("param1", "Hello");
...但是考虑到您添加了“ xslt-2.0”作为标记,因此您应该知道浏览器中内置的XSLT支持仅支持XSL 1.0。
以下内容可能会提供其他帮助:
Saxon-CE XSLT 2.0处理器在浏览器中作为JavaScript库/框架运行。 由于它的JavaScript具有高度的互操作性,因此您可以将参数传递给XSLT处理器,但是您也可以从XSLT调用JavaScript函数,从而增加了灵活性。
在传递值时,JavaScript中的数组与XSLT 2.0序列相对应,但是仍需要谨慎以确保跨语言边界保留类型。
用于Saxon-CE的JavaScript API具有2种不同的语法形式-一种与您的代码中的语法相同,但以下是替代语法的示例-相同的代码在所有主要浏览器上运行:
<!DOCTYPE html>
<html>
<head>
<title>stacko</title>
<script type="text/javascript" language="javascript"
src="../Saxonce/Saxonce.nocache.js"></script>
<script type="text/javascript" language="javascript">
var my_course = "physics";
onSaxonLoad = function() {
proc = Saxon.run( {
stylesheet: 'stacko.xsl',
source: 'stacko.xml',
parameters: {
course_name: my_course,
tutor: "Mr smith"
}
} );
}
</script>
</head>
<body>
<div id="example"></div>
</body>
</html>
无需使用此处理器将结果片段返回到JavaScript(尽管您可以根据需要),因为XSLT 2.0 xsl:result-document指令已得到扩展,因此它可以使用href属性来指定其中的元素ID要更新的HTML页面,例如:
<xsl:result-document href="#example" method="replace-content">
<p><xsl:value-of select="ixsl:source()/books/book[@title = 'One']/></p>
</xsl:result-document>
Saxon-CE文档的API部分中有更多详细信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.