- ベストアンサー
サイドバー付きGoogleMap表示方法の改変とXMLファイルの編集
- サイドバー付きでGoogleMapを表示させるためのXMLファイルの書き方について質問しています。
- A.xmlとB.xmlの2つの書き方がありますが、B.xmlではエラーが発生してしまいます。
- JavaScriptの中身を改変する方法やExcelでの編集・保存方法についてのアドバイスを求めています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、最初のアドバイス ■【B.xml】の書き方のXMLを読み込めるようにJavaScriptの中身を改変 スクリプトの中に var xml = GXml.parse(data); の文がありますね。ここで参照するxmlオブジェクトを作っているわけです。 次の、var markers = xml.documentElement.getElementsByTagName("marker"); で、<marker>タグを持つノードをmarkers配列に格納してます。 それで、markers[i].getAttribute("xx")という参照は<marker>ノードの Attributeの参照をしています。【B.xml】の書き方に対応するには、<marker>の Attributeの参照じゃなく、<marker>の子供ノードの<lat>とか<lng>...のノード を参照してそのnodeValueを取ればよいことになります。 例えば、 var point = new GLatLng(parseFloat(markers[i].getElementsByTagName("lat")[0].nodeValue,parseFloat(markers[i].getElementsByTagName("lng")[0].nodeValue)) みたいに。(言ってる事、解りますか?:以下余談) あるいは、xpathというのを使う手法もありますが、GoogleMapsApiのGXmlの正体 が不明のため、自身ありません。おそらくActiveXObject("Msxml2.XMLHTTP")か、 XMLHttpRequest()が自動的に選ばれてるだけだと思うんですが... xml.setProperty("SelectionLanguage", "XPath") node_list = xmlobj.selectNodes(xpath_str); target_node = node_list(0); // IE か、 node_list = xml.evaluate(xpath_str,xml,null,XPathResult.ANY_TYPE,null); target_node = node_list.iterateNext(); // IE以外 でできるのかなああ。 ■【A.xml】をエクセルのようなセル形式で編集する方法・ツール(もしくはエクセルでの編集・保存方法) 別カテゴリーの質問になりますね。 -エクセルの機能については解りません(そもそもバージョンによって全然違う) -エクセルでVBAマクロ作れば出来ます。 その場合も、単純にxmlをテキストファイルとして出力する方法 =>比較的、簡単だけど文字コードがShift-Jisになってしまう。 xmlオブジェクトを Dim xml As MSXML2.DOMDocument Set xml = CreateObject("MSXML2.DOMDocument") で作って書き出す方法 =>読み込みはともかく書き出しはやったことない。出来ると思うけど、 MSDNのサイトを見ながら苦労する事になりそう...
お礼
追記です。 XMLは下記のようになっています。 <?xml version="1.0" encoding="UTF-8"?> <markers> <marker> <lat>00.000000</lat> <lng>00.000000</lng> <label>●●●</label> <html>▲▲▲</html> </marker> </markers> どうぞよろしくお願い致します。
補足
早速のお返事ありがとうございます。 とても分かりやすく説明していただいて、感謝いたします。 「【A.xml】をエクセルのようなセル形式で編集する方法・ツール(もしくはエクセルでの編集・保存方法)」は、確かに別カテゴリの質問ですね。 そのまま流れで質問してしまい、申し訳ありませんでした。 XMLの編集をどうこうするのは難しそうなので、スクリプトの中身を改変する方法をとりたいと思います。 教えていただいたように、XMLの読み込み部分を下記のように修正してみたのですが、表示させると「'documentElement' は Null またはオブジェクトではありません。」というエラーが出て表示できません。 GDownloadUrl("data/example-xml-.xml", function(data, responseCode) { // XMLファイルの名称・場所 if(responseCode == 200) { var xml = GXml.parse(data); var markers = xml.documentElement.getElementsByTagName("marker"); var side_bar = document.getElementById("side_bar"); side_bar.innerHTML = ""; for (var i = 0; i < markers.length; i++) { var point = new GLatLng(parseFloat(getElementsByTagName("lat")[0].nodeValue),parseFloat(markers[i].getElementsByTagName("lng")[0].nodeValue)); var label = markers[i].getElementsByTagName("label")[0].nodeValue; var html = markers[i].getElementsByTagName("html")[0].nodeValue; var marker = createMarker(point, label, html); map.addOverlay(marker); var side_barEntry = createside_barEntry(marker, label); side_bar.appendChild(side_barEntry); } 検索して調べてみたのですが、解決法が分かりませんでした…。 ご教授いただけましたら幸いです。 よろしくお願い致します。