Как мне преобразовать XML-документ с помощью XSLT и добавить параметр в IE? - PullRequest
2 голосов
/ 04 апреля 2011

Я новичок в изучении XSLT, и я столкнулся с чем-то, чего я действительно не совсем понимаю.Мне нужно добавить параметр XSLT перед преобразованием документа.Я могу сделать это для браузеров не IE следующим образом:

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 = loadXMLDoc("cdcatalog.xml");
    xsl = loadXMLDoc("cdcatalog.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("example").appendChild(resultDocument);
    }
}

Теперь я могу сделать это для браузеров не IE, создан новый объект XSLT-процессора, импортирована таблица стилей, и вы просто добавляете параметрдо процесса трансформации.Похоже, что ничего этого не происходит для версии кода IE, и я не могу просто добавить параметр перед преобразованием.Я много гуглил и видел разные вещи, говорящие мне о создании новых объектов ActiveX в разных версиях MSXML, и я глубоко растерялся из-за всего этого.

Взяв приведенный выше код, как мне это сделать:
xsltProcessor.setParameter(null,"PARAMNAME","PARAMVALUE");

за исключением IE и, если возможно, может кто-нибудь объяснить, как IE работает со всей концепцией XSLT иначе, чем с FF / O / C / другими цивилизованными браузерами?

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Вы можете попробовать использовать Sarissa, который представляет собой уровень абстракции, который предоставляет кросс-браузерный API XSLT-преобразования.

0 голосов
/ 04 апреля 2011

Согласно этой странице , вы можете использовать

XSLTProcessor.addParameter("Parameter Name", "Parameter Value");

, где XSLTProcessor создается с

var XSLTCompiled = new ActiveXObject("MSXML2.XSLTemplate");
XSLTCompiled.stylesheet = XSL.documentElement;
var XSLTProcessor = XSLTCompiled.createProcessor();

Вызов преобразования также отличается.

XSLTProcessor.transform();

В любом случае, похоже, что есть довольно подробное объяснение того, что вы просите.

Я сделал кросс-браузерное XSLT-преобразование некоторое время назад, и вот код, который я использовал. createDocument - это просто функция для возврата документа DOM. Я не делал параметры таблицы стилей, так что, возможно, это немного не по теме, но в любом случае это работает на IE6 + и Firefox 1.5+.

// arguments can be string (uri of document) or document node
function xslTransform( content, transform, options )
{
    if ("string" == typeof content)   content = createDocument( content );
    if ("string" == typeof transform) transform = createDocument( transform );

    var targetEle;

    if (options && options.target) targetEle = document.getElementById(options.target);

    if (targetEle && options.replace)
        while (targetEle.hasChildNodes())
            targetEle.removeChild( targetEle.firstChild );

    if (window.XSLTProcessor)
    {
        var processor = new XSLTProcessor();
        processor.importStylesheet( transform );
        var frag = processor.transformToFragment( content, document );
        if (targetEle)
            targetEle.appendChild( frag );
    }
    else if (window.ActiveXObject)
    {
        if (targetEle)
            targetEle.innerHTML = content.transformNode( transform );
    }
    else return "XSLT not supported";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...