Benutzer mit den meisten Antworten
XDocument einlesen von Datei oder URL mit Schema

Frage
-
Hi,
ich habe eine XML Datei, welche ich gern als XDocument einlesen möchte. Dazu nutze ich
XDocument immoDoc = XDocument.Load("NestoriaXML.txt");
Leider erhalte ich folgende Fehlermeldung beim einlesen: System.Xml.XmlException: "Unerwartetes Token '='. Erwartet wurde das Token ';'. Zeile 5, Position 410."
Hier ein Auszug der XML:
<opt xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://api.nestoria.co.uk/xml-schema-1.22.xsd"> <request country="de" language="de" location="coord_50.88796587158805,10.938894039453755,51.06762892841195,11.118578760546244" num_res="50" offset="100" output="xml" page="3" pretty="1" product_type="realestate" property_type="property" size_type="gross" size_unit="m2" sort="nestoria_rank" listing_type="appartmentbuy"/> <response application_response_code="100" application_response_text="listings returned for one unambiguous location" created_http="Tue, 16 Jul 2019 15:37:51 GMT" created_unix="1563291471" link_to_url="https://www.nestoria.de/immobilien/kaufen/coord_50.88796587158805,10.938894039453755,51.06762892841195,11.118578760546244/3" page="3" sort="nestoria_rank" status_code="200" status_text="OK" thanks="For using the Nestoria API." total_pages="6" total_results="282" listing_type="appartmentbuy"> <attribution img_height="22" img_url="https://resources.nestimg.com/nestoria/img/pbr_v1.png" img_width="183" link_to_img="http://www.nestoria.com"/> <listings bedroom_number="2" car_spaces="0" commission="0.0" construction_year="0" datasource_name="Immowelt" floor="-1" img_height="300" img_url="https://imgs.nestimg.com/schoner_wohnen_in_erfurt_ringelberg_110128458789701680.jpg" img_width="400" keywords="Keller, Stellplatz, Mehrfamilienhaus" latitude="50.999787" lister_url="https://www.nestoria.de/detail/0000000110128458789701680/title/5/3-1?serpUid=&pt=1&ot=1&l=bruehlervorstadt&did=13_default&t_sec=9&t_or=45&t_pvid=null&utm_source=api&utm_medium=external" listing_type="buy" location_accuracy="6" longitude="11.059815" price="130000.0" price_currency="€" price_formatted="130.000 €" price_high="130000.0" price_low="130000.0" price_type="fixed" property_type="property" room_number="2.0" size="57" size_type="gross" summary="Lage: Das Gebiet Ringelberg ist ein bei den Erfurtern sehr beliebte..." thumb_height="60" thumb_url="https://imgs.nestimg.com/medium/schoner_wohnen_in_erfurt_ringelberg_110128458789701680.jpg" thumb_width="80" title="Erfurt - Mehrfamilienhaus" updated_in_days="287" updated_in_days_formatted="seit mehr als einem Monat"/> <listings bathroom_number="2" bedroom_number="7" car_spaces="0" commission="0.0" construction_year="1930" datasource_name="Kommunales Immobilienportal" floor="-1" img_height="300" img_url="https://resources.nestimg.com/nestoria/img/noimage/desktop/flat/3.png" img_width="400" keywords="Keller, Zentralheizung, Einbauküche, Garage, Parkett" latitude="50.946727" lister_name="Sparkasse" lister_url="https://www.nestoria.de/detail/0000000111866288387785851/title/5/3-2?serpUid=&pt=1&ot=1&l=bruehlervorstadt&did=25_default&t_sec=9&t_or=45&t_pvid=null&utm_source=api&utm_medium=external" listing_type="buy" location_accuracy="6" longitude="11.034775" price="640000.0" price_currency="€" price_formatted="640.000 €" price_high="640000.0" price_low="640000.0" price_type="fixed" property_type="flat" room_number="7.0" size="0" size_type="gross" summary="Großzügige Eigentumswohnung in bester Wohnlage im Erfurter Süden:In..." thumb_height="60" thumb_url="https://resources.nestimg.com/nestoria/img/noimage/mobile/flat/4.png" thumb_width="80" title="Wohnung zum Kauf in 99096 Erfurt" updated_in_days="6" updated_in_days_formatted="seit 6 Tagen"/> <listings bedroom_number="2" car_spaces="0" commission="0.0" construction_year="0" datasource_name="Immowelt" floor="-1" img_height="300" img_url="https://imgs.nestimg.com/helle_und_freundliche_2_zimmer_eigentumswohnung_in_erfurt_111587669267688641.jpg" img_width="400" keywords="Keller, Stellplatz, Balkon, Einbauküche, Erdgeschoss, Einfamilienhaus" latitude="50.950635" lister_url="https://www.nestoria.de/detail/0000000111587669267688641/title/5/3-3?serpUid=&pt=1&ot=1&l=bruehlervorstadt&did=13_default&t_sec=9&t_or=45&t_pvid=null&utm_source=api&utm_medium=external" listing_type="buy" location_accuracy="7" longitude="11.100749" price="124000.0" price_currency="€" price_formatted="124.000 €" price_high="124000.0" price_low="124000.0" price_type="fixed" property_type="property" room_number="2.0" size="59" size_type="gross" summary="Lage: Die Wohnung befindet sich in Windischholzhausen eine idyllisc..." thumb_height="60" thumb_url="https://imgs.nestimg.com/medium/helle_und_freundliche_2_zimmer_eigentumswohnung_in_erfurt_111587669267688641.jpg" thumb_width="80" title="Erfurt - Balkon, Einfamilienhaus" updated_in_days="51" updated_in_days_formatted="seit mehr als einem Monat"/>
Die "Suchergebnisse" werden in <listings> aufgelistet.. Die einzelnen Angaben wie Räume werden allerdings nicht als Childs sondern als Parameter angegeben. (Also soweit wie ich das mit meinen kläglichen Kenntnissen beurteilen kann :)
Mir ist aufgefallen, dass es auch ein gewisses Schema gibt. Darauf wird in der ersten Zeile verwiesen (<opt xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://api.nestoria.co.uk/xml-schema-1.22.xsd">)
Wie gelingt es mir, diese XML einzulesen, oder gar noch besser, gleich aus dem Web zu ziehen via URL und weiterzuverarbeiten, sodass mir die einzelnen Einträge als Objekt/Objektliste zur Verfügung stehen?
Vielen Dank schon mal für Eure Hilfe.
.::datekk::.
- Bearbeitet datekk2 Dienstag, 16. Juli 2019 16:19
Antworten
-
Hi,
die XML Datei halt eben nicht korrekt aufgebaut bzw. ist der Inhalt nicht XML konform.
An der angegeben Position steht ein URL mit Parametern. Dort steht dann bspw.:
/5/3-1?serpUid=&pt=1&...
Das ist nicht zulässig. & im Inhalt muss als & hinterlegt werden.
/5/3-1?serpUid=&pt=1&...
Ändere das überall, dann klappt das auch.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
- Bearbeitet Stefan FalzModerator Dienstag, 16. Juli 2019 16:35
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:18
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Hallo
>Also die XML Datei baue ich ja nicht selbst, sondern sie wird ja vom Websiteanbieter so ausgeliefert.
Genau das stimmt nicht, denn der Beispiellink liefert ein valides XML Dokument zurück, es wird also nicht "so ausgeliefert". Ich vermute das Speichern in der Textdatei führt zu dem Problem (& geht dabei verloren?).
- Gruß Florian
- Bearbeitet Florian Haupt Mittwoch, 17. Juli 2019 14:07
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:55
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Also die XML Datei baue ich ja nicht selbst, sondern sie wird ja vom Websiteanbieter so ausgeliefert. Ich habe die Ausgabe als Textdatei abgespeichert
Du hast dir den Inhalt der Datei wahrscheinlich in Firefox oder einem anderen Browser angeschaut, dort alles markiert, kopiert und in eine Textdatei geschrieben. Das geht natürlich nicht, da die Darstellung eine ganz andere ist als der eigentliche Inhalt.
Wenn Du das schon machen willst, geh über "Datei -> Speichern unter..." oder nimm gleich WebClient.DownloadString( <Url> ) (für .NET Classic, also bis bis .NET Framework 4.8), dann hast Du das Problem gar nicht erst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:19
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Hi,
ich empfehle Dir beim Seitenanbieter nachzufragen, ob es einen Endpunkt (WebService o.ä.) gibt, wo Du die Daten anders abrufen kannst. Mit der Abfrage beim Anbieter kannst Du auch gleich erkennen, ob der von Dir geplante Weg überhaut rechtens ist.Wenn es keine rechtlichen Probleme gibt, kannst Du die Daten auch parsen und XML-konform machen, wie es Stefan vorgeschlagen hat.
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:19
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Hi,
für Json schau dir am besten mal JSON.NET an. Damit kannst Du Json genauso einfach und sicher serialisieren und deserialisieren wie Du es jetzt mit XML machst (wenn der XML Inhalt denn korrekt wäre)
Ich würde mir hierfür eine entsprechende Klassenstruktur anlegen, die Inhalte bspw. per WebClient.DownloadString (vorausgesetzt, Du erstellst eine .NET Classic Anwendung, bei .NET Core wird das etwas anders gemacht) runterladen und das Ergebnis dann von JSON.NET in ein Objekt deserialisieren.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Bearbeitet Stefan FalzModerator Dienstag, 16. Juli 2019 21:42
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:19
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
Alle Antworten
-
Hi,
die XML Datei halt eben nicht korrekt aufgebaut bzw. ist der Inhalt nicht XML konform.
An der angegeben Position steht ein URL mit Parametern. Dort steht dann bspw.:
/5/3-1?serpUid=&pt=1&...
Das ist nicht zulässig. & im Inhalt muss als & hinterlegt werden.
/5/3-1?serpUid=&pt=1&...
Ändere das überall, dann klappt das auch.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
- Bearbeitet Stefan FalzModerator Dienstag, 16. Juli 2019 16:35
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:18
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Hallo Stefan,
danke, dass Du immer so schnell einspringst... Klasse :)
Also die XML Datei baue ich ja nicht selbst, sondern sie wird ja vom Websiteanbieter so ausgeliefert. Ich habe die Ausgabe als Textdatei abgespeichert, später möchte ich diese jedoch direkt aus dem Web abrufen und verarbeiten.
Hier ein Beispiellink: https://api.nestoria.co.uk/api?encoding=xml&pretty=1&action=search_listings&country=uk&listing_type=buy&place_name=brighton
Wie kann ich direkt vom Web aus die Dateien an XDokument übergeben und wie kann ich dann vorher darauf Einfluss nehmen und das amp hinter jedes & einbauen?
LG
.::datekk::.
-
Hi,
ich empfehle Dir beim Seitenanbieter nachzufragen, ob es einen Endpunkt (WebService o.ä.) gibt, wo Du die Daten anders abrufen kannst. Mit der Abfrage beim Anbieter kannst Du auch gleich erkennen, ob der von Dir geplante Weg überhaut rechtens ist.Wenn es keine rechtlichen Probleme gibt, kannst Du die Daten auch parsen und XML-konform machen, wie es Stefan vorgeschlagen hat.
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:19
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Naja, das ist schon rechtens (https://www.nestoria.co.uk/help/api).
Der Dienst bietet die Datenausgabe auch via JSON an. Damit kann ich es ja auch mal probieren. Im Moment habe ich noch keine Ahnung, wie ich das nutzen kann und zu einem Objekt mache.
.::datekk::.
-
Hi,
für Json schau dir am besten mal JSON.NET an. Damit kannst Du Json genauso einfach und sicher serialisieren und deserialisieren wie Du es jetzt mit XML machst (wenn der XML Inhalt denn korrekt wäre)
Ich würde mir hierfür eine entsprechende Klassenstruktur anlegen, die Inhalte bspw. per WebClient.DownloadString (vorausgesetzt, Du erstellst eine .NET Classic Anwendung, bei .NET Core wird das etwas anders gemacht) runterladen und das Ergebnis dann von JSON.NET in ein Objekt deserialisieren.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Bearbeitet Stefan FalzModerator Dienstag, 16. Juli 2019 21:42
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:19
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Hallo
>Also die XML Datei baue ich ja nicht selbst, sondern sie wird ja vom Websiteanbieter so ausgeliefert.
Genau das stimmt nicht, denn der Beispiellink liefert ein valides XML Dokument zurück, es wird also nicht "so ausgeliefert". Ich vermute das Speichern in der Textdatei führt zu dem Problem (& geht dabei verloren?).
- Gruß Florian
- Bearbeitet Florian Haupt Mittwoch, 17. Juli 2019 14:07
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:55
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45
-
Also die XML Datei baue ich ja nicht selbst, sondern sie wird ja vom Websiteanbieter so ausgeliefert. Ich habe die Ausgabe als Textdatei abgespeichert
Du hast dir den Inhalt der Datei wahrscheinlich in Firefox oder einem anderen Browser angeschaut, dort alles markiert, kopiert und in eine Textdatei geschrieben. Das geht natürlich nicht, da die Darstellung eine ganz andere ist als der eigentliche Inhalt.
Wenn Du das schon machen willst, geh über "Datei -> Speichern unter..." oder nimm gleich WebClient.DownloadString( <Url> ) (für .NET Classic, also bis bis .NET Framework 4.8), dann hast Du das Problem gar nicht erst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 22. Juli 2019 05:19
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 31. Juli 2019 04:45