我正在尝试编写我的第一个Firefox-Extension。扩展应该使用XSLT以一种很好的方式显示FOAF-Files。现在我只想在按下按钮时将XSL样式表添加到rdf文件中。调用该函数但是rdf文件的表示不会改变。
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 displayMyResult()
{
alert("test")
xml=loadXMLDoc("http://www.example.com/me.rdf");
xsl=loadXMLDoc("http://www.example.com/test.xsl");
if (window.ActiveXObject)
{
ex=xml.transformNode(xsl);
content.document.location.replace(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);
content.document.location.replace(ex)
}
}
第一个函数loadXMLDoc在这里从另一个帖子复制,应该可以工作。 Probem位于displayMyResult方法中。测试警报确认已调用该函数,但me.rdf文件未显示任何不同。
我认为内容content.document.location.replace(ex)是错误的,但在网上找不到任何可以向我解释的内容。
有人能告诉我如何加载XLST样式表来呈现RDF文件吗?
答案 0 :(得分:0)
为什么用于Mozilla扩展的代码会检查IE对象,如“ActiveXObject”?
无论如何,你的代码没有多大意义,你的Mozilla分支永远不会分配给名为ex
的变量,但你会调用replace(ex)
。
一些更有意义的代码将是
var resultFragment = xsltProcessor.transformToFragment(xml, content.document);
content.document.replaceChild(resultFragment, content.document.documentElement);
但我不确定它是否会起作用,特别是如果content.document的类型与XSLT的结果文档不同(即一个是HTML文档,另一个是SVG文档)。 p>