Вы пробовали что-то подобное?
xmlhttp.responseXML.resolveExternals = true;
xmlhttp.responseXML.setProperty("ProhibitDTD", false);
Единственное, что решение может работать только с MSXML XMLHTTP ActiveX объект.
Редактировать: вот конкретный пример с IE9:
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.6.0");
// var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "sample.xml", false);
xmlhttp.responseXML.async = false;
xmlhttp.responseXML.resolveExternals = true;
xmlhttp.responseXML.validateOnParse = false;
xmlhttp.responseXML.setProperty("ProhibitDTD", false);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readystate == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseXML.xml);
}
}
xmlhttp.send();
sample.xml
<!DOCTYPE data SYSTEM "sample.dtd"><data>&ent;</data>
sample.dtd
<!ENTITY ent "Hello world!">
Если вы запустите вышеупомянутый код с IE9, вы успешно получите разрешение сущности,Однако, если вы переключитесь на закомментированный XMLHttpRequest, у вас ничего не получится.
PS: я думал, что вы говорили о сценариях внутри IE, и есть собственный компонент Trident, называемый XMLHttpRequest, который сильно отличается от компонента XmlHttp ActiveX,Однако, если вы ссылаетесь на интерфейс COM IXMLHttpRequest, находящийся в MSXML6.DLL, вы можете с легкостью перевести приведенный выше код в C ++.