プロが教える店舗&オフィスのセキュリティ対策術

サイドバー付きでGoogleMapを表示させるものを、色々参考にしながら作成しています。

【動作サンプル】
http://6pesos.googlecode.com/svn/trunk/xml.html

↑このサンプルのようにxmlファイルを読み込む形をとりたいのですが、

【A.xml】
<markers>
<marker lat='xxx' lng='xxx' html='テスト' label='1'/>
</markers>

だと、きちんと表示できるのですが、

【B.xml】
<markers>
<marker>
<lat>xxx</lat>
<lng>xxx</lng>
<html>テスト</html>
<label>1</label>
</marker>
</markers>

だと、表示できず「documentElement は Null またはオブジェクトではありません」というエラーが出ます。
スクリプトの中身をいじってみたのですが、お手上げです。

■【B.xml】の書き方のXMLを読み込めるようにJavaScriptの中身を改変
■【A.xml】をエクセルのようなセル形式で編集する方法・ツール(もしくはエクセルでの編集・保存方法)
※Excel2003で「xmlリストとして開く」→「ファイル種類:XMLデータで保存」→「ワークシートの機能が失われる…と警告」→続行で保存→ブラウザで表示させると「引数の数が一致していません。または不正なプロパティを指定しています。」とエラーになります…。

どちらか分かる方いらっしゃいましたら、ご教授いただけないでしょうか。
よろしくお願い致します。

A 回答 (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のサイトを見ながら苦労する事になりそう...

この回答への補足

早速のお返事ありがとうございます。
とても分かりやすく説明していただいて、感謝いたします。

「【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);
}


検索して調べてみたのですが、解決法が分かりませんでした…。
ご教授いただけましたら幸いです。
よろしくお願い致します。

補足日時:2010/05/01 13:01
    • good
    • 0
この回答へのお礼

追記です。
XMLは下記のようになっています。


<?xml version="1.0" encoding="UTF-8"?>
<markers>
<marker>
<lat>00.000000</lat>
<lng>00.000000</lng>
<label>●●●</label>
<html>▲▲▲</html>
</marker>
</markers>


どうぞよろしくお願い致します。

お礼日時:2010/05/01 13:11

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