javascript:在XML数据中动态添加xsl样式表的问题

javascript: Problem with dynamically adding xsl-stylesheet to XML Data

本文关键字:样式 xsl 问题 添加 动态 XML 数据 javascript      更新时间:2023-09-26

我正在尝试编写我的第一个Firefox扩展。该扩展应该使用XSLT以一种很好的方式显示FOAF文件。现在我只想在按下按钮时将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.deocument.location.replace(ex)行是错误的,但在网上没有找到任何可以向我解释使用什么的内容。

有人能告诉我如何加载XLST样式表来呈现RDF文件吗?

为什么您的Mozilla扩展代码要检查像"ActiveXObject"这样的IE对象?无论如何,您的代码没有多大意义,您的Mozilla分支从未分配给名为ex的变量,但您随后调用replace(ex)。一些更有意义的代码将是

var resultFragment = xsltProcessor.transformToFragment(xml, content.document);
content.document.replaceChild(resultFragment, content.document.documentElement);

但我不确定这在一般情况下是否有效,特别是如果content.document的类型与XSLT的结果文档不同(即一个是HTML文档,另一个是SVG文档)。