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

すいません。調べても分からないので質問します。
JAVASCRIPTでXMLの操作をしています。
デバッグのため、XMLの全体を表示したいのですが、どのプロパティを使ったら良いか分からないのです。

クライアント側でDOMを使ってXMLの中身を修正した後に
xmlHttp.responseTextをalertで表示するように修正後のXMLの中身を見たいのです。

xmlData = xmlHttp.responseXML;

としたときのxmlDataからXMLをテキストで取り出すプロパティがあるのではないかと思うのですが見つけられません。
使用しているのはmac os x 10.6のsafari4.04です。
他のブラウザなら出来るなどの情報でも構わないのでご存じの方がおりましたらお願いします。

A 回答 (3件)

とりあえず、


Internet Explorer以外なら、
alert(xmlData.toSource());
でアラートできますが、英数以外は化けてる(コード化表示)し、
長いと見難いし....ちょっとしたデバッグならこれでいけます。

XMLオブジェクトをパースしてくれるjavascriptライブラリーや、
オブジェクトをテキストダンプするライブラリーがあるので、そ
ちらを使うほうが便利です。
(JKL.ParseXML)<=Ajaxもやってくれるすぐれ物
http://www.kawa.net/works/js/jkl/parsexml.html
(XML.Objtree)<= JKL.ParseXMLの後継
http://www.kawa.net/works/js/xml/objtree.html
JKL.Dumper (オブジェクトをJSON形式に変換)
http://www.kawa.net/works/js/jkl/dumper.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
残念ながら、safariとChromeではmethodが無いと言われてしまいました。
IEとFireFoxは他のエラーで表示されない。

XML.Objtree辺りも少し調べてみます。
昔IEでやったときは.xmlかなんかで取れたんですけどね。
こんなところで引っかかるとは思いませんでした。

お礼日時:2010/03/18 13:56

すみません。

記憶違いでした。
toSource()ではXMLオブジェクトは表示できません。どこかで見た気が
したのですが、おそらく普通のオブジェクトに変換した後、見たんだったと思います。

<昔IEでやったときは.xmlかなんかで取れたんですけどね。>
IEだと
xmlData = new ActiveXObject("Microsoft.XMLDOM");
のxmlDocにXMLをロードして、自在に操ったり、XPATHで抽出したり
できます。(機能はECMA準拠の普通のjavascriptより機能豊富です)
http://msdn.microsoft.com/ja-jp/library/aa468547 …
http://msdn.microsoft.com/ja-jp/library/ms256471 …

ライブラリー使わないとなると、safari4.04なら、前の部分がわかりませんが、
 xmlData = new XMLHttpRequest();で取得したXMLオブジェクトとか
 xmlData = document.implementation.createDocument("", "", null)
でロードしたXMLオブジェクトなら。
 DOM要素として扱えるので、document.xxx系の関数で扱いエレメントを
参照するか
https://developer.mozilla.org/ja/DOM/document
 最近だとdocument.evaluate()関数でノードリストの取得や、
XPATHが使えます。
https://developer.mozilla.org/ja/Introduction_to …

いずれも結構ややこしく、ずばっと
一括テキスト表示(インデント付き)をやりたかったら、
自分でコードを組まなければなりません。

確か、前に作ったやつがあるので、探しておきます。
みつかったら載せますが、ライブラリー使ったほうが早いですよ。
    • good
    • 0
この回答へのお礼

ライブラリでいけました。
DOMになっていたので、JSオブジェクトに変換してから
ソースにしているのでちょっとバカっぽいですが。
とりあえず見れれば十分なので助かりました。
ありがとうございました。

お礼日時:2010/03/19 00:33

safariでうまくいくかどうかわかりませんが、


これでどうです。(IE8とFirefox3.6では出来てました)
XMLパースエラーのハンドリングはさぼっています。

var xmlDoc = (window.ActiveXObject)?new ActiveXObject('microsoft.XMLDOM'):document.implementation.createDocument("", "", null);
xmlDoc.async=false;
xmlDoc.load("orders.xml");
//上記の部分はあなたのXMLオブジェクトに合わせて変えてください。//
document.write("<p /><h1>ツリー構造の表示</h1><p />")
printElement("",xmlDoc.documentElement);

function printElement(indent,node) {
var tab=""
var i;
if (node.nodeType == 3) {
document.write("<br />" +indent + node.nodeValue);
}
else {
document.write("<br />" +indent + "[" + node.nodeName + "]");
for(j = 0; j < node.attributes.length ; j++){
document.write("<br />" +indent + node.attributes[j].nodeName
+":"+ node.attributes[j].nodeValue);
}
for (i = 0; i < node.childNodes.length; i++) {
printElement(indent+tab, node.childNodes[i]);
}
document.write("<br />" +indent + "[/" + node.nodeName + "]");
}
}
    • good
    • 0
この回答へのお礼

度々ありがとうございました。
教えて頂いたURLをちょっと見ましたが、
一生懸命調べるよりもライブラリを当たった方が早そうです。

上記の関数もデバッグには役立ちそうなので試してみます。

お礼日時:2010/03/18 21:16

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