jQuery, XML. Zwei Attribute mit selbem Inhalt

#1
Hallo,
ich habe Anhand mehrerer Tutorials folgendes Skript erstellt:

Code:
function readOutPosition(position){
                    $.get("http://maps.googleapis.com/maps/api/geocode/xml?latlng="+position+"&language=de_DE&sensor=false", function(XMLmediaArray){
                    $(XMLmediaArray).find("address_component").each(function(){

                    var $myMedia = $(this);
                    
                    if($myMedia.find("type").text()=="route") 
                        $("#address_street").val($myMedia.find("long_name").text());
                    if($myMedia.find("type").text()=="street_number") 
                        $("#address_hnr").val($myMedia.find("long_name").text());
                    if($myMedia.find("type").text()=="postal_code") 
                        $("#address_zip").val($myMedia.find("long_name").text());
                    if($myMedia.find("type").text()=="locality") 
                        $("#address_city").val($myMedia.find("long_name").text());
                });
                });
                }
Dieses versucht anhand der LAT-LNG-Postition durch Google den Standort zu ermitteln (Strasse, Ort, etc.). Dadurch wird eine XML von Google geparst, die in etwa so aussieht:

Code:
<GeocodeResponse>
<status>OK</status>
  <result>
  <type>street_address</type>
  <formatted_address>
    Bohlengschwend 104, 6932 Langen bei Bregenz, Österreich
  </formatted_address>
<address_component>
  <long_name>104</long_name>
  <short_name>104</short_name>
  <type>street_number</type>
</address_component>
<address_component>
  <long_name>Bohlengschwend</long_name>
  <short_name>Bohlengschwend</short_name>
  <type>route</type>
</address_component>
<address_component>
  <long_name>Langen bei Bregenz</long_name>
  <short_name>Langen bei Bregenz</short_name>
  <type>locality</type>
  <type>political</type>
</address_component>
[....]
Soweit funktioniert alles, außer der Ort. Dieser kann ich mit meiner Programmierung nicht abgreifen, da "type" in dem Block zweimal vorkommt. Wie kann ich nur auf "locality" hören? Leider finde ich durch meine Google und Forumssuchen nicht das was ich suche. Vielleicht habt ihr dazu auch ein besseres Stichwort nachdem ich suchen kann.

Dankeschön!
 

hela

Premium-User
#2
... Dieser kann ich mit meiner Programmierung nicht abgreifen, da "type" in dem Block zweimal vorkommt. Wie kann ich nur auf "locality" hören? ...
Hallo,

wie hast du denn das mit den Elementen namens "address_component" gemacht? Die gibt es ja auch mehrmals und da hast du eine funktionierende Lösung gefunden.

... Leider finde ich durch meine Google und Forumssuchen nicht das was ich suche. Vielleicht habt ihr dazu auch ein besseres Stichwort nachdem ich suchen kann.
Ja hier: "jQuery: XML einlesen".

Übrigens: Welche "Attribute mit selbem Inhalt" meinst du? Hat das was mit deinem Problem zu tun?
 
#3
Hallo Hela,
vielen Dank für deinen Denkanstoß. Ich habe es nun lösen können. Scheinbar habe ich viel zu tief gedacht, um festzustellen, dass es doch recht trivial über "each" gemacht werden kann. Hier das fertige Script:
Code:
function readOutPosition(position){
                    $.get("http://maps.googleapis.com/maps/api/geocode/xml?latlng="+position+"&language=de_DE&sensor=false", function(XMLmediaArray){
                    $(XMLmediaArray).find("address_component").each(function(){

                    var $myMedia = $(this);
                    
                    if($myMedia.find("type").text()=="route")
                       $("#address_street").val($myMedia.find("long_name").text());
                    else if($myMedia.find("type").text()=="street_number") 
                       $("#address_hnr").val($myMedia.find("long_name").text());
                    else if($myMedia.find("type").text()=="postal_code") 
                       $("#address_zip").val($myMedia.find("long_name").text());
                    else {
                      var isCity = false;
                      var isCountry = false;
                      $myMedia.find("type").each(function() {
                          if($(this).text()=="locality") isCity=true;
                          else if($(this).text()=="country") isCountry=true;
                      });
                      if(isCity) $("#address_city").val($myMedia.find("long_name").text());
                      else if(isCountry) $("#address_country").val($myMedia.find("long_name").text());
                    }
                      
                    });
                    });
                }
 
Zuletzt bearbeitet von einem Moderator: