German Xml alle daten parsen

mcmanu

Active Member
Licensed User
Longtime User
Hi,
Ich will die daten von google place auslesen, nun mein Problem, ich bekomme beim normalen parsen das Letzte element in der xml datei (was auch klar ist). Ich weiß das ich einen Zähler einbauen kann --> intcnt=intcnt+1
jedoch ist die xml bei anderen abfragen mal größer oder kleiner
Wie kann ich trozdem alle daten auslesen? beim zähler ist es ja so das ich weiss aha in der zeile 9 steht das was ich will also intcnt=9
das geht aber nicht bei der place xml da ich nicht die genaue anzahl von der abfrage weiss.
Kann mir jemand behilflich sein? :)

xml datei -->
B4X:
<PlaceSearchResponse>
<status>OK</status>
−
<result>
<name>Restaurant Il Vero</name>
<vicinity>Harderstraße 12, Ingolstadt</vicinity>
<type>night_club</type>
<type>cafe</type>
<type>bar</type>
<type>restaurant</type>
<type>food</type>
<type>establishment</type>
−
<geometry>
−
<location>
<lat>48.7662520</lat>
<lng>11.4231280</lng>
</location>
</geometry>
<rating>2.5</rating>
−
<icon>
http://maps.gstatic.com/mapfiles/place_api/icons/bar-71.png
</icon>
−
<reference>
CnRvAAAAtkDFvdwwXCznLXnecammDlHrscrQBJV-quBSFRhzYVZPyUnbZORrqwyyMnZtx7WvmBFHqZeKZE4oPC0gGegccqTwl3hBKXkDBwdYuQN3Y59AcXoz-aMHKpP9zRFaZbKyb9TZumxsR9Y3Z8gfZ5cuMBIQjT17hjx-OfcCShh2dtHZ4RoUdLHCbaPppWq_43_AeNyKFh_R_2w
</reference>
<id>47a01d7694d1af65c0294d6e54f7021c9c24963c</id>
</result>
−
<result>
<name>Manolo Cafe Bar Inh. Jasmin Smith</name>
<vicinity>Am Westpark 2, Ingolstadt</vicinity>
<type>cafe</type>
<type>bar</type>
<type>restaurant</type>
<type>food</type>
<type>establishment</type>
−
<geometry>
−
<location>
<lat>48.7734580</lat>
<lng>11.3893570</lng>
</location>
</geometry>
<rating>3.6</rating>
−
<icon>
http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png
</icon>
−
<reference>
CoQBfwAAAOt74PhWMghY-8rOr4u18oWkUytNyTK4iRXHZOxpnb7HefZ4gwjkvj33Qn-AowlFBVwP5TJ9dxD6iQeqlbvYvTPZamcyDBMy3wZYsbM3K3UpNcXIEm0XrOxdelpcw0oDOzA9xSNy1afH16gxP5Y13go_yHsYhYELtMy7cfDWevriEhDSlQVPn5uxH6Y4eho4MH8XGhTn6HTWNcnerbWAkwlbipuvNsr4sA
</reference>
<id>c73eb74bf4bd15233aa5c197df09e74e87b35874</id>
</result>
−
<result>
<name>Restaurant Indian Palace</name>
<vicinity>Haunwöhrer Straße 81, Ingolstadt</vicinity>
<type>restaurant</type>
<type>food</type>
<type>establishment</type>
−
<geometry>
−
<location>
<lat>48.7504040</lat>
<lng>11.4217470</lng>
</location>
</geometry>
<rating>4.7</rating>
−
<icon>
http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png
</icon>
−
<reference>
CoQBdQAAAHrfMk_ZZCwaGN_fJhOnHSwti0m3ag7jJhtUy6_yZm5XM2K2J15YfoteGDoj2dnNcovkBwrCMLLL6cscIoIusjFrHCA6o4u9LqEeWq6lej9ncKKKwhBuckftcDWn4C-mOwOIPgfq1w0n5AePxSkpDdNnclikyWZvt4fMNJjoTvkcEhCo-ecNOnse2TnghFdluoZSGhTj94cLbQXXn7WuFEPR8KqEjD6fvQ
</reference>
<id>743a011c1c51bd96f94ff7d7fbd718faff24808a</id>
</result>
−
<result>
<name>KIK Restaurant im Klenzepark</name>
<vicinity>Flankenbatterie 105, Ingolstadt</vicinity>
<type>bar</type>
<type>restaurant</type>
<type>food</type>
<type>establishment</type>
−
<geometry>
−
<location>
<lat>48.7629360</lat>
<lng>11.4358660</lng>
</location>
</geometry>
<rating>3.6</rating>
−
<icon>
http://maps.gstatic.com/mapfiles/place_api/icons/bar-71.png
</icon>
−
<reference>
CoQBegAAAOm9rehwN_VsaKkOQ1uNfOpK5YNlBjYUwL_VE7wJblbgZTbnwJee0ssm9H8O0zySphpMU3p5i2GA9moQQtxG131PkPhFc-4v-5iG3FE-iFxWGo4WVAb5F79f-dqR80EiPgZXfhaRBtXTjs-3zcMu75sK8jP4VFJR9ZNQVi_q-g9JEhBJCjpbDVVSZ8G19lxcYAAOGhTI0Gv7qklBPNY7Ggvpww4zQ33L1g
</reference>
<id>f3b20a92602de4ea9b698954605646351d1f661d</id>
</result>
−
<result>
<name>Taj Mahal - Indisches Spezialitäten Restaurant</name>
<vicinity>Beckerstraße 11, Ingolstadt</vicinity>
<type>restaurant</type>
<type>food</type>
<type>establishment</type>
−
<geometry>
−
<location>
<lat>48.7658430</lat>
<lng>11.4293080</lng>
</location>
</geometry>
<rating>3.5</rating>
−
<icon>
http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png
</icon>
−
<reference>
CpQBjQAAAN9ItNAkL41A_gtoe1OyOK-psk1eT-gVkKF3-CAV1dImLxT1Aw--l-ZE-eueWvqXdgHH4Sy6tmZXrmA9e9IeAHE1PpGsgbYalDlzKyFU6vm15IYOpKc_us9k0tn97_Ci68BMe40G7i6hlhSMkPCxHncUUcvzxazOHgf-99dGXjTmfJhUw8yZCz4_v_5w7UghqRIQJ2ULGHtYoFTIUxJXTSdF3xoUmAnzsBlFECtXnPuK5DSe9yeJtXM
</reference>
<id>a6ebf8d1655b037f8b5b4bd888ba9bbd8ede341e</id>
</result>
−
<result>
<name>Ara Hotel Comfort</name>
<vicinity>Theodor-Heuss-Straße 30, Ingolstadt</vicinity>
<type>restaurant</type>
<type>lodging</type>
<type>food</type>
<type>establishment</type>
−
<geometry>
−
<location>
<lat>48.7792080</lat>
<lng>11.4352460</lng>
</location>
</geometry>
−
<icon>
http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png
</icon>
−
<reference>
CnRvAAAAt5dJ5HjN0pWsIm6ckqG7vGclTMRdXgidLkOv4Kp70Moyj-Qo1rh_75TEIaHJ8n0T6a9b_vF7vgGka0-0S492f85srSPxQbXb9wak7lgxTjBQe8E4dE_-ZIABzI8h_0bpo-NcwsoDT8dlG1om7gCeBBIQjwhaqDfbbu4jl4_eVCJc0xoU039zeOk4dDBIE1DBmjOEGEquCdY
</reference>
<id>22f17935e9ddf59d8d03c8a65c07e6ec72c24402</id>
</result>
−
<result>

Ich will in label1 -->name,vicinity und rating
dann in label2 das nächste name,vicinity und rating und so weiter
 
Last edited:

Kiffi

Well-Known Member
Licensed User
Longtime User
hier mal ein kleiner Ansatz (denk daran, [DeinApiKey] auszutauschen):

B4X:
Sub Process_Globals

End Sub

Sub Globals

   Dim Result_Name As String
   Dim Result_Vicinity As String

   Dim myListView As ListView
   Dim mySaxParser As SaxParser
   Dim myHttpClient As HttpClient

End Sub

Sub Activity_Create(FirstTime As Boolean)

   myListView.Initialize("myListView")
   
   Activity.AddView(myListView, 0, 0, 100%x, 100%y)

   mySaxParser.Initialize

   myHttpClient.Initialize("myHttpClient")

   Dim myRequest As HttpRequest
   
   myRequest.InitializeGet("https://maps.googleapis.com/maps/api/place/search/xml?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=[DeinApiKey]")
   
   myHttpClient.Execute(myRequest, 1)

End Sub

Sub myHttpClient_ResponseSuccess (Response As HttpResponse, TaskId As Int)
   
   mySaxParser.Parse(Response.GetInputStream, "mySaxParser")
   
End Sub

Sub mySaxParser_StartElement (Uri As String, Name As String, Attributes As Attributes)
   
End Sub

Sub mySaxParser_EndElement (Uri As String, Name As String, Text As StringBuilder)

   If mySaxParser.Parents.IndexOf("result") > -1 Then
   
      If Name = "name" Then
         Result_Name = Text.ToString
      Else If Name = "vicinity" Then
         Result_Vicinity = Text.ToString
      End If
      
   End If
   
  If Name = "result" Then
      myListView.AddTwoLines(Result_Name, Result_Vicinity)
  End If
      
End Sub

Ich persönlich würde nicht mit statischen Elementen (Label1, Label2, ...)
arbeiten, wenn die Anzahl der Ergebnisse variieren kann. Baue Deine
Oberfläche dann lieber zur Laufzeit dynamisch zusammen oder verwende (wie
in dem Beispiel oben) ein ListView.

Grüße ... Kiffi
 

mcmanu

Active Member
Licensed User
Longtime User
Hi

Danke ;) Super :) Dank dir werd ich langsam zum Parser Profi :
Danke das du mir immer hilfst :)
Werds gleich morgen mal testen :)
 

mcmanu

Active Member
Licensed User
Longtime User
Gps einbauen

Hi Kiffi,
Wollte jetzt nun lat und lon über gps ermitteln und danach die ergebnisse anzeigen. In die Textbox schreibe ich den gewünschten suchbegriff.
Jedoch kommt mir das mit Gps Richtig Langsam vor, es dauert ewig bis lat und lon ermittelt wurde.

Weißt du wie man schneller an lat und lon kommen kann?

Falls du das Projekt dazu brauchst sage mir bescheid dann lade ich es hoch ;)

Vielen dank erstmal :)

P.s hab mir überlegt das ich dann lat und lon eventuell speichere und beim nächsten mal die benutze, aber schöner wärs wenn es immer über gps gehen würde :)
 
Last edited:
Top