teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コメントを受けて追記

2019/07/08 09:15

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37468

answer CHANGED
@@ -23,4 +23,40 @@
23
23
  1. `new Number(ddd);`ですが、上のコメントのとおりです。`Number(文字列)`とすることで、数値化できます。この場合、`ddd`に入っているのは`xmlDoc`ですから、文字列ではありません。
24
24
  1. `eee.b`ですが、3のとおり`eee`には期待しているものが入っていません。また、1のとおり、プロパティのように参照できるものでもありません。
25
25
 
26
- 開発者ツールを見て、エラーメッセージを読み、`console.log`などを使って、変数に入っている値とその構造を確認しながらコーディングを進めるべきです。
26
+ 開発者ツールを見て、エラーメッセージを読み、`console.log`などを使って、変数に入っている値とその構造を確認しながらコーディングを進めるべきです。
27
+
28
+ ### コメントを受けて追記
29
+
30
+ ```js
31
+ function DataXML(){
32
+
33
+ var text, parser, xmlDoc;
34
+ text ='...';
35
+
36
+ var parser = new DOMParser();
37
+ var xmlDoc = parser.parseFromString(text,"application/xml");
38
+ return xmlDoc.getElementsByTagName('googleMaps');
39
+ }
40
+
41
+ var googleMaps = DataXML();
42
+ var lat = Number( googleMaps[0].attributes.lat.value );
43
+ var lon = Number( googleMaps[0].attributes.lon.value );
44
+
45
+ function initMap() {
46
+
47
+ var map = new google.maps.Map(document.getElementById('demo'),{
48
+ zoom: 12,
49
+ center: new google.maps.LatLng(41.409651, 2.183685),
50
+ mapTypeId: google.maps.MapTypeId.ROADMAP
51
+ });
52
+
53
+ var latLng = new google.maps.LatLng(lat,lon);
54
+
55
+ var marker = new google.maps.Marker({
56
+ position: latLng,
57
+ map: map,
58
+
59
+ });
60
+ }
61
+ ```
62
+ こちらだとどうなりますか?

2

質問の編集にあわせて追記2

2019/07/08 09:15

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37468

answer CHANGED
@@ -15,4 +15,12 @@
15
15
  1. そして`hoge[0]`は[Element](https://developer.mozilla.org/ja/docs/Web/API/Element)です。この場合、`<googleMaps lat="41.359684477777776" lon="2.145138777777778"/>`などが入っています。
16
16
  この要素の属性を得るには`attributes`プロパティにアクセスする必要があります。`.attributes.lat`などとしてみてください。
17
17
  1. [new google.maps.LatLng()](https://developers.google.com/maps/documentation/javascript/reference/coordinates#LatLng)ですが、引数は数値です。
18
- そのため、[Number](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number)などを利用する必要があります。
18
+ そのため、[Number](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number)などを利用する必要があります。
19
+
20
+ ### 質問の編集にあわせて追記2
21
+ 1. `var b = googleMap.attributes.lat;`ですが、`var`で宣言された変数は、その関数の中にスコープを持ち外からは参照できません。この場合、`DataXML()`の外側からは参照できないということです。
22
+ 1. `return xmlDoc;`ですが、`xmlDoc`は変更を加えられていませんので、返ってくるのはXML全体のXMLDocumentです。これは想定と異なるのでは。
23
+ 1. `new Number(ddd);`ですが、上のコメントのとおりです。`Number(文字列)`とすることで、数値化できます。この場合、`ddd`に入っているのは`xmlDoc`ですから、文字列ではありません。
24
+ 1. `eee.b`ですが、3のとおり`eee`には期待しているものが入っていません。また、1のとおり、プロパティのように参照できるものでもありません。
25
+
26
+ 開発者ツールを見て、エラーメッセージを読み、`console.log`などを使って、変数に入っている値とその構造を確認しながらコーディングを進めるべきです。

1

質問の編集にあわせて追記

2019/07/05 09:28

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37468

answer CHANGED
@@ -3,4 +3,16 @@
3
3
  1. 非同期通信なので、`DataXML()`が実行されるまでにXMLの受信が終了しないと思います。
4
4
  解決方法ですが、`xhttp.onreadystatechange`に書いてください。
5
5
  1. `googleMaps`に入っているのは、おそらく[XMLDocument](>XMLDocument - Web APIs | MDN [XMLDocument - Web APIs | MDN](https://developer.mozilla.org/en-US/docs/Web/API/XMLDocument))です。なので、`.lat`というプロパティはありません。
6
- 解決方法ですが、DOM API を使って参照してください。
6
+ 解決方法ですが、DOM API を使って参照してください。
7
+
8
+ ### 質問の編集にあわせて追記
9
+ 1. `parseFromString(text,"data/xml")`ですが、`data/xml`というMIMETYPEは不適切だと思います。
10
+ `application/xml`にしてみてください。
11
+ 1. `getElementsByTagName('lat')`ですが、`lat`というタグはないようです。
12
+ おそらく、`getElementsByTagName('googleMaps')`の間違いかと思います。
13
+ 1. `getElementsByTagName()`は[HTMLCollection](https://developer.mozilla.org/ja/docs/Web/API/HTMLCollection)を返します。
14
+ そのため、`hoge[0]`などのように添え字をつけるなどしてアクセスする必要があります。
15
+ 1. そして`hoge[0]`は[Element](https://developer.mozilla.org/ja/docs/Web/API/Element)です。この場合、`<googleMaps lat="41.359684477777776" lon="2.145138777777778"/>`などが入っています。
16
+ この要素の属性を得るには`attributes`プロパティにアクセスする必要があります。`.attributes.lat`などとしてみてください。
17
+ 1. [new google.maps.LatLng()](https://developers.google.com/maps/documentation/javascript/reference/coordinates#LatLng)ですが、引数は数値です。
18
+ そのため、[Number](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number)などを利用する必要があります。