1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

jQuery, XML. Zwei Attribute mit selbem Inhalt

Dieses Thema im Forum "XML Technologien" wurde erstellt von vNeumann, 13. Januar 2014.

  1. vNeumann

    vNeumann Mitglied

    Hallo,
    ich habe Anhand mehrerer Tutorials folgendes Skript erstellt:

    Code (Text):
    1. function readOutPosition(position){
    2.                     $.get("http://maps.googleapis.com/maps/api/geocode/xml?latlng="+position+"&language=de_DE&sensor=false", function(XMLmediaArray){
    3.                     $(XMLmediaArray).find("address_component").each(function(){
    4.  
    5.                     var $myMedia = $(this);
    6.                    
    7.                     if($myMedia.find("type").text()=="route")
    8.                         $("#address_street").val($myMedia.find("long_name").text());
    9.                     if($myMedia.find("type").text()=="street_number")
    10.                         $("#address_hnr").val($myMedia.find("long_name").text());
    11.                     if($myMedia.find("type").text()=="postal_code")
    12.                         $("#address_zip").val($myMedia.find("long_name").text());
    13.                     if($myMedia.find("type").text()=="locality")
    14.                         $("#address_city").val($myMedia.find("long_name").text());
    15.                 });
    16.                 });
    17.                 }
    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 (Text):
    1. <GeocodeResponse>
    2. <status>OK</status>
    3.   <result>
    4.   <type>street_address</type>
    5.   <formatted_address>
    6.     Bohlengschwend 104, 6932 Langen bei Bregenz, Österreich
    7.   </formatted_address>
    8. <address_component>
    9.   <long_name>104</long_name>
    10.   <short_name>104</short_name>
    11.   <type>street_number</type>
    12. </address_component>
    13. <address_component>
    14.   <long_name>Bohlengschwend</long_name>
    15.   <short_name>Bohlengschwend</short_name>
    16.   <type>route</type>
    17. </address_component>
    18. <address_component>
    19.   <long_name>Langen bei Bregenz</long_name>
    20.   <short_name>Langen bei Bregenz</short_name>
    21.   <type>locality</type>
    22.   <type>political</type>
    23. </address_component>
    24. [....]
    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!
     
  2. hela

    hela Premium-User

    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.

    Ja hier: "jQuery: XML einlesen".

    Übrigens: Welche "Attribute mit selbem Inhalt" meinst du? Hat das was mit deinem Problem zu tun?
     
  3. vNeumann

    vNeumann Mitglied

    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 (Text):
    1. function readOutPosition(position){
    2.                     $.get("http://maps.googleapis.com/maps/api/geocode/xml?latlng="+position+"&language=de_DE&sensor=false", function(XMLmediaArray){
    3.                     $(XMLmediaArray).find("address_component").each(function(){
    4.  
    5.                     var $myMedia = $(this);
    6.                    
    7.                     if($myMedia.find("type").text()=="route")
    8.                        $("#address_street").val($myMedia.find("long_name").text());
    9.                     else if($myMedia.find("type").text()=="street_number")
    10.                        $("#address_hnr").val($myMedia.find("long_name").text());
    11.                     else if($myMedia.find("type").text()=="postal_code")
    12.                        $("#address_zip").val($myMedia.find("long_name").text());
    13.                     else {
    14.                       var isCity = false;
    15.                       var isCountry = false;
    16.                       $myMedia.find("type").each(function() {
    17.                           if($(this).text()=="locality") isCity=true;
    18.                           else if($(this).text()=="country") isCountry=true;
    19.                       });
    20.                       if(isCity) $("#address_city").val($myMedia.find("long_name").text());
    21.                       else if(isCountry) $("#address_country").val($myMedia.find("long_name").text());
    22.                     }
    23.                      
    24.                     });
    25.                     });
    26.                 }
     
    Zuletzt von einem Moderator bearbeitet: 14. Januar 2014
Die Seite wird geladen...