none
XDocument einlesen von Datei oder URL mit Schema RRS feed

  • 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
    Dienstag, 16. Juli 2019 16:18

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 &amp; hinterlegt werden.

    /5/3-1?serpUid=&amp;pt=1&amp;...

    Ä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


    Dienstag, 16. Juli 2019 16:34
    Moderator
  • 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 (&amp; geht dabei verloren?).


    - Gruß Florian


    Mittwoch, 17. Juli 2019 14:06
  • 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

    Mittwoch, 17. Juli 2019 14:50
    Moderator
  • 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

    Dienstag, 16. Juli 2019 17:40
  • 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


    Dienstag, 16. Juli 2019 21:38
    Moderator

Alle Antworten