Загрузка файла XML с помощью xmlhttp в IE8

Я разрабатываю онлайн-опрос, одной из основных особенностей которого является то, что вопросы хранятся во внешнем файле XML, при этом каждый раз загружаются случайные вопросы. Хотя код, который у меня есть, отлично работает в Firefox, я получаю сообщение об ошибке «Отказано в доступе» при попытке загрузить страницу в Internet Explorer 8. Я выделил проблему в следующей части кода:

//Import the XML File
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5*/
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

//Import XML
xmlhttp.open("POST","Personalized Tour/questions.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

В частности, ошибка возникает на xmlhttp.open. Я просмотрел несколько других веб-сайтов на предмет похожих проблем, и они, похоже, предположили, что была какая-то ошибка домена, которая запускала настройки безопасности IE8. Так ли это, или есть нечто большее, чем это?

Спасибо за вашу помощь.


person Robert    schedule 24.03.2011    source источник
comment
Используете ли вы URL-адреса file://? Если это так, вероятно, проблема в том, что IE не думает, что страницы file:// имеют общий домен, поэтому он защищает их друг от друга. Хром делает то же самое.   -  person Pointy    schedule 24.03.2011
comment
"Personalized Tour/questions.xml" не является допустимым URL-адресом. Пробелы не допускаются.   -  person Tomalak    schedule 24.03.2011
comment
Спасибо. На самом деле проблема заключалась в URL-адресе file://, и похоже, что эта проблема исправлена.   -  person Robert    schedule 24.03.2011
comment
К сожалению, сейчас у меня другая проблема. Кажется, XML загружается нормально, но мой код выдает ошибки, когда я пытаюсь получить доступ к данным в переменной xmlDoc. Знаете ли вы, использует ли IE другой синтаксис xmldom? Код, который у меня есть сейчас: var majorCats = xmlDoc.getElementsByTagName("major")[0]; var printValue = majorCats.childNodes[1].childNodes[9].childNodes[0].nodeValue;   -  person Robert    schedule 24.03.2011


Ответы (1)


в IE вы можете использовать XPATH непосредственно в xml-документе, другие браузеры делают это, создавая парсер xpath

поэтому выбор всех «основных» элементов будет выглядеть так:

xmlDoc.selectNodes("//major")

но как только у вас есть этот селектор индекса [0], вы можете сделать это более эффективно:

xmlDoc.selectSingleNode("//major")

результаты обоих совершенно разные (кроме прироста производительности)

selectNodes вернет список узлов (список не является частью dom) selectSingleNode вернет первый узел (не список)

однако вы можете сделать окончательный выбор одной командой с помощью xpath, например:

xmlDoc.selectSingleNode("//major/*[1]/*[9]/*[0]")

/* нотация [n] подходит, но вы можете использовать имена узлов, если они уникальны, или их комбинацию

имея узел, вы можете добавить .noValue, .text, .textContent, .nodeName по мере необходимости

person neu-rah    schedule 21.04.2012