Laden...

Google-Wetter-API auslesen

Erstellt von vita85 vor 12 Jahren Letzter Beitrag vor 12 Jahren 9.608 Views
V
vita85 Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren
Google-Wetter-API auslesen

Hallo, erstmal vorab: ich bin noch recht neu auf dem C# bzw .NET-Gebiet.
Vor einigen Wochen habe ich angefangen das Visual C# 2010 Buch bei Galileo Openbooks durchzuarbeiten und bin auch ziemlich zufrieden mit dem Buch als Lernhilfe. Nachdem es dann an die "komplizierteren" Artikel bzw. Themen ging, habe ich beschlossen zwischendrin immer selbstgestellte Übungen zu machen.

Nachdem ich das Kapitel XML durchgelesen habe, wollte ich mir mithilfe der Google Wetter API (Beispiel für Köln: http://www.google.de/ig/api?weather=Koeln) ein kleines Tool zur Wettervorhersage bauen. Durch die Wetter API ist das im Prinzip ja nichts anderes als XML-Dokument auslesen und Daten irgendwie leserfreundlich aufbereiten.

Nachdem ich die Datei auf meine Festplatte gezogen habe, stoße ich aber auf ein Problem, wenn ich das XML Zeilenweise durchlaufe.
Mit folgendem Code erhalte ich eine XmlException:

XmlReader auslesen = XmlReader.Create(@"wetter.xml");
while (auslesen.Read()) {
}

Wer nun ins XML Dokument (den oben geposteten Link) mal reingeschaut hat, stellt fest, dass es unter dem Punkt "<current_conditions>" einen Unterpunkt "<humidity data="Feuchtigkeit: 77 **:::

Könnt ihr mir vielleicht sagen, wie ich das Problem eliminieren kann?

Wäre für jede Hilfe Dankbar.

Gruß,
vita

799 Beiträge seit 2007
vor 12 Jahren

Hier stand Blödsinn...

Wenn es immer an dem Prozentzeichen scheitert, lies den Text erstmal nur als String ein und ersetz das Zeichen durch ein "Prozent" oder "%" Danach verwende den XML-Reader oder noch besser linq to XML.

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl
V
vita85 Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren

Hallo Schlingel,
ich habe deine Lösung ausprobiert, aber ich kam nicht damit zurecht.
Ich habe das Problem jetzt in dem Sinne "gelöst", indem ich einfach mal eine andere Sprache ausprobiert habe. Standardmäßig ist die XML-Datei in der jeweiligen Landessprache verfasst, fügt man aber noch was hinten an (http://www.google.de/ig/api?weather=Koeln&hl=en), ist das Dokument komischerweise auf einmal wohlgeformt.
Ich denke ich werde nun mit der englischen Version weiterarbeiten, bis ich das Problem verstehe.

Edit: Stimmt... Auf die Idee das als Zeichenkette zu behandeln bin ich noch gar nicht gekommen 😄. Danke für den Tipp.

799 Beiträge seit 2007
vor 12 Jahren

Übrigens hab ich oben nicht % eingetippt sondern nen HTML-Code für ein Prozentzeichen.

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl
V
vita85 Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren

Jo, das hab ich mir schon gedacht.
Ich habe jetzt das komplette XML in einen String eingelesen und das %-Zeichen einfach rausgelöscht.
Werde dann eine neue XML erzeugen und damit weiterarbeiten.
Danke dir für die Hilfe. Ich kann das XML jetzt fehlerfrei durchlaufen.

V
vita85 Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren

Hallo, erstmal bitte ich um Entschuldigung für den Doppelpost, aber sonst wird der thread nicht als ungelesen markiert.

Folgendes: Ich habe mir den Ratschlag von Schlingel zu Herzen genommen und den Code erstmal in einen string geschrieben. Vorerst habe ich den String bearbeitet und mittels

wohlgeformt = wohlgeformt.Replace("%", "Prozent");

das Prozentzeichen ausgetauscht. Danach habe ich die Zeile weggelassen, sodass die methode nur noch wie folgt aussah:

public string googleWetterXmlWohlformer(string uDatei) {
            StreamReader reader = new StreamReader(uDatei);
            string wohlgeformt = reader.ReadToEnd();
            reader.Close();

            StreamWriter writer = new StreamWriter(uDatei);
            writer.WriteLine(wohlgeformt);
            writer.Close();

            return wohlgeformt;
        }

Also im Endeffekt nur die XML in einen string eingelesen und wieder zurück in eine XML Datei geschrieben.

Meine Frage ist nun: Ich habe im Endeffekt nichts geändert. Warum gilt die Datei vor der Operation jedoch nicht als wohlgeformt, nachher aber schon?

Habe jetzt zwei Tage immer mal wieder im Internet gesucht, aber nichts gefunden, was die Frage beantworten könnte, deswegen wende ich mich an euch.

Edit: Die Programmlogik funktioniert nun komplett fehlerfrei. Kann schon über die Konsole das aktuelle Wetter und das Wetter der nächsten 3 Tage sehen. Der nächste Schritt wird nun sein sich mit WPF auseinanderzusetzen und da eine GUI drauf zu bauen.

O
79 Beiträge seit 2011
vor 12 Jahren

Ich könnte mir vorstellen, das das mit Unicode zusammenhängt. Die von Google gelieferte XML-Datei ist womöglich ASCII codiert, durch dein simples einlesen und wieder wegschreiben wird das ganze nun aber Unicode-codiert abgelegt.

Ist allerdings pure Theorie.