javascript:将xsl-stylesheet动态添加到XML数据的问题

时间:2011-06-20 15:36:13

标签: javascript xml xslt firefox-addon

我正在尝试编写我的第一个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文件吗?

1 个答案:

答案 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>