javascript: проблема с динамическим добавлением таблицы стилей xsl в данные XML - PullRequest
0 голосов
/ 20 июня 2011

Я пытаюсь написать свое первое расширение для Firefox. Предполагается, что расширение будет отображать FOAF-файлы с использованием XSLT. Сейчас я просто хочу добавить таблицу стилей 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 скопирована из другого поста здесь и, вероятно, должна работать. Пробник находится в методе displayMyResult. Тестовое предупреждение подтверждает, что функция вызывается, но файл me.rdf не отображается по-другому.

Я считаю, что строка content.document.location.replace (ex) неверна, но не нашла в Интернете ничего, что объясняло бы мне, что вместо этого использовать.

Может кто-нибудь сказать мне, как загрузить таблицу стилей XLST для представления файла RDF?

1 Ответ

0 голосов
/ 20 июня 2011

Почему ваш код, предназначенный для расширения 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...