Laden...

XML von google wetter api wird nicht geladen

Erstellt von Animal21 vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.613 Views
A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 11 Jahren
XML von google wetter api wird nicht geladen

Hallo leute,

ich hab mit über die Wetter api von google, eine xml datei gezogen:

http://www.google.com/ig/api?weather=04435-Germany&hl=de

Es ist ja anzunehmen, dass diese XML-Datei keine fehler ausweist.
Folgenderweise ist mein ablauf:

XmlDocument doc = new XmlDocument();
        new System.Net.WebClient().DownloadFile("http://www.google.com/ig/api?weather=04435-Germany&hl=de", "temp.xml");
        doc.LoadXml("temp.xml");

Leider kommt die Fehlermeldung > Fehlermeldung:

"Ungültige Daten auf Stammebene. Zeile 1, Position 1."

Wo könnte da der Fehler liegen?

grüße
ani

Gelöschter Account
vor 11 Jahren

mit LoadXml lädst du naaaaaa? genau: XML. genauer gesagt einen string der gültiges XML enthält. Alternativ wäre Load die richtige Wahl.

16.824 Beiträge seit 2008
vor 11 Jahren

Hast Du Dir selbst die Mühe gemacht und angeschaut, wie die Datei überhaupt aussieht, was drin steckt und ob LoadXml genau das erwartet, was Du ihm gibst?
So wie der Code aussieht nämlich nicht.

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 11 Jahren

Natürlich habe ich mir den XML-Code angesehen und er ist völlig komform.
hier ein Ausschnitt:


<?xml version="1.0"?>
<xml_api_reply version="1">
	<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" >
		<forecast_information><city data="Schkeuditz, Sachsen"/>
			<postal_code data="04435-Germany"/>
			<latitude_e6 data=""/>
			<longitude_e6 data=""/>
			<forecast_date data="2012-08-20"/>
			<current_date_time data="1970-01-01 00:00:00 +0000"/>
			<unit_system data="SI"/>
		</forecast_information>
	<current_conditions>
		<condition data="Klar"/>
		<temp_f data="97"/>
		<temp_c data="36"/>
...

D
216 Beiträge seit 2009
vor 11 Jahren

Lies dir die Antwort von Sebastian.Lange noch mal durch.

Darth Maim

T
415 Beiträge seit 2007
vor 11 Jahren

Und wenn du das gemacht hast, setzt du noch das Encoding "ISO-8859-1" und du solltest keine Probleme mehr haben.

C
252 Beiträge seit 2007
vor 11 Jahren

Mittels XmlDocument.Load() kannst du dir den Umweg über den WebClient sparen.

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 11 Jahren

Danke für die antworten...

Wenn ich nur Load verwende, gibt es auch eine Fehlermeldung, ob Zwischenspeicher über WebClient, oder direkt. Wenn ich die temporäre Datei mit dem utf-8 encode manuell versehe, dann funktioniert es. Nur möchte ich ja, dass das Programm aller 10 Sekunden die Wetterdaten abfragt und aktuallisiert.

Zwischenlösung, die mir einfällt, wäre das ganze als Textdatei zu öffnen und per StreamWriter zu bearbeiten und dann erst als XML zu öffnen?! Wirkt mir etwas umständlich dafür, dass es eine automatisch generierte XML-Datei von Google ist. 😦

grüße
ani

V
66 Beiträge seit 2010
vor 11 Jahren
Hinweis von herbivore vor 11 Jahren

Kurz gesagt, wir dort folgende Lösung vorgeschlagen.

var m_strFilePath = "http://www.google.com/ig/api?weather=04435-Germany&hl=de";
string xmlStr;
using(var wc = new WebClient())
{
    xmlStr = wc.DownloadString(m_strFilePath);
}
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr);
A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 11 Jahren

danke schön für den link, funktioniert so...
Der folgelink in dem thread ist auch sehr interessant. Der erklärt warum es so geht.

grüße
ani

916 Beiträge seit 2008
vor 11 Jahren

Kleiner Tip noch am Rande. Aller 10 Sekunden ist keine Gute Idee weil du dann früher doer später folgende Meldung bekommen wirst...

Fehlermeldung:
We're sorry...

... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.

See Google Help for more information.

Oder du baust halt einen dynamischen Proxy ein dann solltest du das umgehen können.

Again what learned...