parser.parseFromString()
の第1引数はパスではなくて、テキストデータです。
解決方法ですが、text
にXMLのテキストデータを入れてください。
- 非同期通信なので、
DataXML()
が実行されるまでにXMLの受信が終了しないと思います。
解決方法ですが、xhttp.onreadystatechange
に書いてください。
googleMaps
に入っているのは、おそらく[XMLDocument](>XMLDocument - Web APIs | MDN XMLDocument - Web APIs | MDN)です。なので、.lat
というプロパティはありません。
解決方法ですが、DOM API を使って参照してください。
質問の編集にあわせて追記
parseFromString(text,"data/xml")
ですが、data/xml
というMIMETYPEは不適切だと思います。
application/xml
にしてみてください。
getElementsByTagName('lat')
ですが、lat
というタグはないようです。
おそらく、getElementsByTagName('googleMaps')
の間違いかと思います。
getElementsByTagName()
はHTMLCollectionを返します。
そのため、hoge[0]
などのように添え字をつけるなどしてアクセスする必要があります。
- そして
hoge[0]
はElementです。この場合、<googleMaps lat="41.359684477777776" lon="2.145138777777778"/>
などが入っています。
この要素の属性を得るにはattributes
プロパティにアクセスする必要があります。.attributes.lat
などとしてみてください。
- new google.maps.LatLng()ですが、引数は数値です。
そのため、Numberなどを利用する必要があります。
質問の編集にあわせて追記2
var b = googleMap.attributes.lat;
ですが、var
で宣言された変数は、その関数の中にスコープを持ち外からは参照できません。この場合、DataXML()
の外側からは参照できないということです。
return xmlDoc;
ですが、xmlDoc
は変更を加えられていませんので、返ってくるのはXML全体のXMLDocumentです。これは想定と異なるのでは。
new Number(ddd);
ですが、上のコメントのとおりです。Number(文字列)
とすることで、数値化できます。この場合、ddd
に入っているのはxmlDoc
ですから、文字列ではありません。
eee.b
ですが、3のとおりeee
には期待しているものが入っていません。また、1のとおり、プロパティのように参照できるものでもありません。
開発者ツールを見て、エラーメッセージを読み、console.log
などを使って、変数に入っている値とその構造を確認しながらコーディングを進めるべきです。
コメントを受けて追記
js
1function DataXML(){
2
3 var text, parser, xmlDoc;
4 text ='...';
5
6 var parser = new DOMParser();
7 var xmlDoc = parser.parseFromString(text,"application/xml");
8 return xmlDoc.getElementsByTagName('googleMaps');
9}
10
11var googleMaps = DataXML();
12var lat = Number( googleMaps[0].attributes.lat.value );
13var lon = Number( googleMaps[0].attributes.lon.value );
14
15function initMap() {
16
17 var map = new google.maps.Map(document.getElementById('demo'),{
18 zoom: 12,
19 center: new google.maps.LatLng(41.409651, 2.183685),
20 mapTypeId: google.maps.MapTypeId.ROADMAP
21 });
22
23 var latLng = new google.maps.LatLng(lat,lon);
24
25 var marker = new google.maps.Marker({
26 position: latLng,
27 map: map,
28
29 });
30}
こちらだとどうなりますか?