2011-02-09 2 views
1

ビルド中のサイトはパッケージとして直接ユーザーに送信されるため、XMLを「ファイル」プロトコル経由で読み込むためのInternet Explorer 8ソリューションを作成しようとしています。私がXMLHttpRequestを使ってこれを処理しようとして経験したことは、私がオンラインで読んだことをサポートしているようです。IE8のXMLHttpRequest実装はプロトコルを嫌うので、ActiveXObjectを使って読み込みを処理する必要があります。JavaScript:ActiveXObject MSXML2.XMLHTTPは、正常な読み込みでXMLを返していません...?

私は様々な人々の提案を実験し、最終的にファイルを取得するコードを持っています。これは、responseTextフィールドがファイルの内容で満たされているためです。しかし、XMLを保持するはずのresponseXML.xmlフィールド(またはそのテキスト表現、私が読んだドキュメントはどれも非常にはっきりしていません)は、常に空文字列です。 XMLを正しく読み込むようにActiveXObjectを設定するにはどうすればよいですか?

また、ロードされたXMLをどのようにロードしたら正常に読み込まれるのかを説明できる人もいますか?私はそのビットを説明する文書をまだ見つけていない。ここで

は私のJavaScriptのである:

function isIE() { 
    return navigator.userAgent.lastIndexOf('Trident') > 0; 
} 

// This block ensures that the XML request occurs in the same domain. 
var path = document.location.href; 
path = path.substr(0, path.lastIndexOf('/') + 1); 

if (isIE() && location.protocol == 'file:') { 
    var xmlRequest = new ActiveXObject('MSXML2.XMLHTTP'); 
    xmlRequest.open('GET', path + 'xml/shared.xml', false); 
    xmlRequest.onreadystatechange = useXML; 
    xmlRequest.send(); 

    function useXML() { 
     if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) { 
      alert(xmlRequest.responseText); // displays the file 
      alert(xmlRequest.responseXML.xml); // displays nothing 
     } 
    } 
} 

そして、ここでは私のXMLファイルです:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<shared> 
    <page_title> 
     Test Page Title 
    </page_title> 
</shared> 

私は、このファイルが何らかの形で不正な形式であったかどうかをチェックするためにW3SchoolsのXMLのバリデータを使用していました。そうではない。

+0

覚えていない...確かに、responseXMLには「xml」プロパティがありますか? – kirilloid

+0

IEは安全でないと判断されるため、XMLを提供しません。テキストを扱う前に私自身のXMLパーサーを作成しました。 (これ以上持っていない、尋ねないでください!) - xmlToObject JSライブラリが浮遊しています。 – mwilcox

答えて

2

ローカルファイルがtext/xmlで務めていましたされていないためです(サーバとしてを行うだろう)ので、IEはそれを解析しません。..

あなたはMicrosoft.XMLDOMオブジェクト

で手動で解析することができます
function useXML() { 
     if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) { 
      alert(xmlRequest.responseText); // displays the file 
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.async="false"; 
      xmlDoc.loadXML(xmlRequest.responseText); 
      title = xmlDoc.documentElement.getElementsByTagName('page_title')[0]; 
      alert(title.childNodes[0].nodeValue); 
     } 
    } 
+0

これは多くの役に立ちました。ありがとうございました! XMLHTTPオブジェクトにXMLDOMを呼び出さずにテキストを解析させる方法はありますか?それは不必要なオーバーヘッドのようです。 – sadakatsu

+0

@gamecoder、私はそれが可能とは思わない。 –

関連する問題