• 締切済み

responseTextについて

---XMLHttpRequest--- javascriptでresponseXMLで取得できないことがあり、responseTextで 取得できたのですが、取得したtextがXMLの形式なんです。 responseTextで取得したモノをXMLとして扱うにはどうしたら よろしいのでしょうか?

みんなの回答

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

希望する回答でなくて申し訳ないが、 responseXMLで取得できない理由はあっさり流さず追及しておいた方がいいかも。 (取得はできてるけどパースエラーになっていて希望する結果が得られていないだけとか?) 代替手段であれこれ余計にいぢりまわすのは、responseXMLで取得できない理由に納得できた後でも遅くないと思います。

回答No.1

何故responseXMLで取れないのかは知らんが(MIME-Typeが間違っているとか?) 何も考えなくて良いなら, 別な時に作った「ユーザーに入力してもらったソースをdocumentの特定の要素に追加するアプリ」のソースから抜粋 /* ボタンを押したことでイベント発動。input[@id='input']の要素には XMLの断片となる文字列が入ってます。 */ var input = document.getElementById("input").value; var parser = null; var dom = null; if(document.implementation.hasFeature('LS', '3.0')){ var LSI = document.implementation.createLSInput(); LSI.stringData = input; parser = document.implementation.createLSParser(document.implementation.MODE_SYNCHRONOUS,null); try{ dom = parser.parse(LSI); }catch(e){ dom = null; } } でこの後 var output = document.getElementById("output"); output.appendChild(document.importNode(dom.documentElement,true)); とかやって実際,Opera 9.52 Alpha Build 10082で動作していました。 #Gecko系と違って catch(e if e instanceof SyntaxError) とかやると文法エラーになったので控えめ ====================================== オマケ: ★俺は「バッドノウハウで同じページにソース載せるなら非公式なページとして分けろ(なのでラッパー的な回避策にもあまり好感を持っていない)」と思っているが,実際に書いたソースはそうなっていないので反面教師だと思ってそのソースまるごとは載せていない。 これから書くこともあまり気がのらない。 Gecko系・Safariでは上記のソースではなく 【非標準の】DOM Parserを使ってDOM Documentを生成することになるだろう。 http://developer.mozilla.org/en/docs/DOMParser ただし,このやり方は問題があって https://bugzilla.mozilla.org/show_bug.cgi?id=289714 (最初から文字列にparsererror要素が含まれていたのか,実際にparseが失敗したのかの区別が付かない) ってのがまだ解決してない。 https://bugzilla.mozilla.org/show_bug.cgi?id=155749#c35 のリンク先の話を流し読みすると★印の姿勢取ってて今後自分は大丈夫なんだろうかと かなり深く悩むんだけど。 やけくそになっているからバージョンを直接していしているがきちんと調べることを勧める。 IE用には dom =new ActiveXObject("msxml2.domdocument.6.0"); dom.loadXML(input); if(dom == null){ throw new SyntaxError("パース出来ませんでした。"); } ってコードが書かれている。 === で、まあここまでしか多分質問者さんは使わないだろうけどさらに愚痴っておく。 ただし,msxml2.domdocument.6.0ならともかく DOM2 のimportNodeなんてメソッドを IEのdocumentは搭載していないので どうしようかな、と思って手が止まっている。 (確かMSDNによるとMSXML 5.0以降対応。 http://msdn.microsoft.com/en-us/library/ms767525(VS.85).aspx ちなみにMSXML 5.0はOffice用 http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx なので現実的にはMSXML 6で決まりかなあ。 ) で,どうしようか考えてる。 まだこの辺は読んでない (再帰的にノードタイプとノード名と内容を調べてdocument.createElement等で生成していく ラッパー的な話になっているんだろうとは思うけど) http://www.alistapart.com/articles/crossbrowserscripting http://d.hatena.ne.jp/amachang/20071112/1194856493 なんてものがあるけど,documentだけでresponseXMLに対してはevaluateメソッドを追加してくれてなかった、というのがあったのでimportNodeに活路を求めようとしたけどないので撃沈。

関連するQ&A