Проблемы применения таблицы стилей (XSL) к (XML) в IE через (JavaScript) - PullRequest
3 голосов
/ 01 марта 2012

Это работает в Firefox, но не работает в IE. IE жалуется на строку 18:

docCache.stylesheet = xsl;

Сообщение о том, что:

Message: The stylesheet does not contain a document element.  The stylesheet may be empty, or it may not be a well-formed XML document.

Вот функция:

function display(dname, compt) {    
document.getElementById(dname+"Table").innerHTML="";

// IE
if (window.ActiveXObject) {
    xml = new ActiveXObject("MSXML2.DOMDocument.3.0");
    xml.async = false;
    xml.load(dname+".xml");

    xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.3.0");
    xsl.async = false;
    xsl.load(dname+".xsl");

    docCache = new ActiveXObject("MSXML2.XSLTemplate.3.0");
    docCache.stylesheet = xsl;

    docProcessor = docCache.createProcessor();
    docProcessor.input = xml;

    docProcessor.addParameter("competitor", compt);

    docProcessor.transform();

    document.getElementById(dname+"Table").innerHTML = docProcessor.output;
}
// Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {

        xml=loadXMLDoc(dname+".xml");
        xsl=loadXMLDoc(dname+".xsl");
        xsltProcessor=new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);    
        xsltProcessor.setParameter(null, "competitor", compt);          
        resultDocument = xsltProcessor.transformToFragment(xml,document);
        document.getElementById(dname+"Table").appendChild(resultDocument);
}

}

И файл XSL:

  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"/>
  <xsl:param name="competitor"/>
  <xsl:template match="/">
      The parameter value was: <xsl:value-of select="$competitor"/>
  </xsl:template>
  </xsl:stylesheet>

Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

1 голос
/ 24 мая 2013

Вы обращаетесь к файлам из файловой системы?

Если вы загружаете свои файлы из протокола file: //, а не http://,, ограничения безопасности браузера могут помешать вам читать файлы. Это позволяет предотвратить чтение других (личных) файлов из вашей файловой системы.

Попробуйте хостинг на веб-сервере и посмотрите, исчезнут ли ваши ошибки.

0 голосов
/ 02 марта 2012

Эта ошибка говорит о том, что MSXML2 не может прочитать XSL (файл XML). Если вы откроете файл XSL в IE, он будет отображаться полностью и правильно без ошибок?

Возможная причина в том, что файл XSL использует кодировку, которую IE и MSXML2 не обнаруживают автоматически, и не содержит оператора кодировки XML в верхней части, например:

<?xml version="1.0" encoding="Windows-1252"?>

Или может быть, что фактическая кодировка файла XSL и его оператор кодировки XML не совпадают.

Вы также можете проверить, что FireFox может открыть и полностью отобразить файл XSL. Если файл искажен, FireFox покажет вам, где находится ошибка (в то время как IE часто может показать вам проблемную область или может показать вам что-то еще полностью).

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