プロが教えるわが家の防犯対策術!

---XMLHttpRequest---
javascriptでresponseXMLで取得できないことがあり、responseTextで
取得できたのですが、取得したtextがXMLの形式なんです。

responseTextで取得したモノをXMLとして扱うにはどうしたら
よろしいのでしょうか?

A 回答 (2件)

希望する回答でなくて申し訳ないが、


responseXMLで取得できない理由はあっさり流さず追及しておいた方がいいかも。
(取得はできてるけどパースエラーになっていて希望する結果が得られていないだけとか?)

代替手段であれこれ余計にいぢりまわすのは、responseXMLで取得できない理由に納得できた後でも遅くないと思います。
    • good
    • 0

何故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=289 …
(最初から文字列にparsererror要素が含まれていたのか,実際にparseが失敗したのかの区別が付かない)
ってのがまだ解決してない。

https://bugzilla.mozilla.org/show_bug.cgi?id=155 …
のリンク先の話を流し読みすると★印の姿勢取ってて今後自分は大丈夫なんだろうかと
かなり深く悩むんだけど。

やけくそになっているからバージョンを直接していしているがきちんと調べることを勧める。

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 …
ちなみにMSXML 5.0はOffice用
http://blogs.msdn.com/xmlteam/archive/2006/10/23 …
なので現実的にはMSXML 6で決まりかなあ。
)

で,どうしようか考えてる。

まだこの辺は読んでない
(再帰的にノードタイプとノード名と内容を調べてdocument.createElement等で生成していく
ラッパー的な話になっているんだろうとは思うけど)
http://www.alistapart.com/articles/crossbrowsers …

http://d.hatena.ne.jp/amachang/20071112/1194856493
なんてものがあるけど,documentだけでresponseXMLに対してはevaluateメソッドを追加してくれてなかった、というのがあったのでimportNodeに活路を求めようとしたけどないので撃沈。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!