• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:すいません。調べても分からないので質問します。)

JAVASCRIPTでXMLの操作方法について

このQ&Aのポイント
  • JAVASCRIPTでXMLの操作をしていますが、XMLの全体を表示する方法が分かりません。
  • クライアント側でDOMを使ってXMLの中身を修正した後、修正後のXMLの中身を表示したいです。
  • xmlDataからXMLをテキストで取り出すプロパティが見つかりません。使用しているのはmac os x 10.6のsafari4.04です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

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="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" 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 + "]"); } }

karakon32
質問者

お礼

度々ありがとうございました。 教えて頂いたURLをちょっと見ましたが、 一生懸命調べるよりもライブラリを当たった方が早そうです。 上記の関数もデバッグには役立ちそうなので試してみます。

その他の回答 (2)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

すみません。記憶違いでした。 toSource()ではXMLオブジェクトは表示できません。どこかで見た気が したのですが、おそらく普通のオブジェクトに変換した後、見たんだったと思います。 <昔IEでやったときは.xmlかなんかで取れたんですけどね。> IEだと xmlData = new ActiveXObject("Microsoft.XMLDOM"); のxmlDocにXMLをロードして、自在に操ったり、XPATHで抽出したり できます。(機能はECMA準拠の普通のjavascriptより機能豊富です) http://msdn.microsoft.com/ja-jp/library/aa468547.aspx http://msdn.microsoft.com/ja-jp/library/ms256471%28VS.80%29.aspx ライブラリー使わないとなると、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_using_XPath_in_JavaScript いずれも結構ややこしく、ずばっと 一括テキスト表示(インデント付き)をやりたかったら、 自分でコードを組まなければなりません。 確か、前に作ったやつがあるので、探しておきます。 みつかったら載せますが、ライブラリー使ったほうが早いですよ。

karakon32
質問者

お礼

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

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

とりあえず、 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

karakon32
質問者

お礼

ありがとうございます。 残念ながら、safariとChromeではmethodが無いと言われてしまいました。 IEとFireFoxは他のエラーで表示されない。 XML.Objtree辺りも少し調べてみます。 昔IEでやったときは.xmlかなんかで取れたんですけどね。 こんなところで引っかかるとは思いませんでした。

関連するQ&A