将javascript和jquery与XSL转换或函数参数混合时出现问题?
我试图在页面上设置导航按钮来加载内容文件,但其中有几个文件是XML文件,需要使用XSL转换进行样式设置。我曾经在w3schools.com的客户机代码上成功地使用XSL,因此我在下面对其进行了修改。但是,我混合使用javascript和jquery时似乎有些问题无法解决,或者我没有正确地传递参数?Firebug告诉我它无法加载“xsl”变量。这个语法有什么问题吗?我是个新手,不知道自己做错了什么将javascript和jquery与XSL转换或函数参数混合时出现问题?,javascript,jquery,xml,xslt,Javascript,Jquery,Xml,Xslt,我试图在页面上设置导航按钮来加载内容文件,但其中有几个文件是XML文件,需要使用XSL转换进行样式设置。我曾经在w3schools.com的客户机代码上成功地使用XSL,因此我在下面对其进行了修改。但是,我混合使用javascript和jquery时似乎有些问题无法解决,或者我没有正确地传递参数?Firebug告诉我它无法加载“xsl”变量。这个语法有什么问题吗?我是个新手,不知道自己做错了什么 <script> $(document).ready(function(){ $
<script>
$(document).ready(function(){
$("#aboutTextButton").click(function(){
$('#contentContainer').load('about-text.html');
});
$("#aboutProjectButton").click(function(){
$('#contentContainer').load('about-project.html');
});
$("#catalogButton").click(function(){
displayResult("catalog.xml","xml-style2.xsl");
});
$("#transcriptionButton").click(function(){
displayResult("behaviour.xml","xml-style2.xsl");
});
});
//script to transform XML, adapted from w3schools.com
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, xsl)
{
// code for IE
if (window.ActiveXObject)
{
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("contentContainer").appendChild(resultDocument);
}
}
</script>
</head>
<body>
<div id="headerImg">
<img src="cover.jpg">
</div>
<div id="menu">
<ul>
<li><a id="aboutTextButton">About the Text</a></li>
<li><a id="aboutProjectButton">About the Project</a></li>
<li><a id="catalogButton">Browse the Images</a></li>
<li><a id="transcriptionButton">Read the Text</a></li>
</ul>
</div>
<div id="contentContainer">
</div>
$(文档).ready(函数(){
$(“#AboutExtButton”)。单击(函数(){
$('#contentContainer').load('about-text.html');
});
$(“#关于项目按钮”)。单击(函数(){
$('#contentContainer').load('about-project.html');
});
$(“#目录按钮”)。单击(函数(){
displayResult(“catalog.xml”、“xml-style2.xsl”);
});
$(“#转录按钮”)。单击(函数(){
displayResult(“behavior.xml”、“xml-style2.xsl”);
});
});
//转换XML的脚本,改编自w3schools.com
函数loadXMLDoc(dname)
{
if(window.XMLHttpRequest)
{
xhttp=newXMLHttpRequest();
}
其他的
{
xhttp=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
xhttp.open(“GET”、dname、false);
xhttp.send(“”);
返回xhttp.responseXML;
}
函数displayResult(xml、xsl)
{
//IE代码
if(window.ActiveXObject)
{
ex=xml.transformNode(xsl);
document.getElementById(“示例”).innerHTML=ex;
}
//Mozilla、Firefox、Opera等的代码。
else if(document.implementation&&document.implementation.createDocument)
{
xsltProcessor=新的xsltProcessor();
导入样式表(xsl);
resultDocument=xsltProcessor.transformToFragment(xml,文档);
document.getElementById(“contentContainer”).appendChild(resultDocument);
}
}
- 关于文本
- 关于这个项目
- 浏览图片
- 读课文
您从未调用loadXMLDoc,因此displayResults函数不是在处理xml文档,而是在处理传递给函数的文件名。displayResult的第一行应该是:
xml = loadXMLDoc(xml);
xsl = loadXMLDoc(xsl);
那么你的代码应该可以工作了 在MDN站点上。您对“.importStylesheet()”的使用不正确。您不经常看到通过javascript应用XSL转换。大多数情况下,它是在发送页面之前在服务器上完成的,尽管可以直接将xml发送到浏览器,并让浏览器使用如下处理指令处理xslt:
。。。无论哪种方式,都没有理由使用javascript,因为服务器端通常是首选方式,而客户端(不使用javascript)xsl在浏览器间得到了非常好的支持(即使ie6几乎100%正确),尽管很少使用。我确实看到很多人问起它,所以现在它可能更常见了。不管怎样,考虑一下你是否真的需要用JavaScript应用XSL;您最好在服务器上应用它,或者让浏览器在不使用javascript的情况下使用它。谢谢,这就是问题所在。