Web-XML to Dataset

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von CaMeO.

    Web-XML to Dataset

    Hallo

    Ich hab mittlerweile eine umfangreiche Video-Datenbank gebaut, die Filme, TV-Serien, etc. verwaltet.
    Hab auch die bekannte MediaInfo.DLL integriert und lese alle Infos der Video-Dateien ein...klappt super
    Nun möchte ich natürlich auch alle Daten aus der IMDB, OFDB und TVDB einlesen bzw.parsen.
    Die Suchfunktion über Web klappt auch schon einwandfrei. Dadurch habe ich die notwendigen Film-IDs der jeweiligen Webdienste.

    Aber bei der OFDB hackt es gewaltig.
    Ich sollte nach Übermittlung der ID alle Movie-Daten als XML erhalten.
    Bei einigen Filmen klappt das auch...aber bei den meisten eben nicht.
    Da erhalte ich beim Dataset.ReadXML den Fehler:
    "Eine geschachtelte Beziehung oder eine Elementespalte kann nicht zu einer Tabelle mit einer SimpleContent-Spalte hinzugefügt werden."

    Beispiel OK: ofdbgw.h1915283.stratoserver.net/movie/3995
    Beispiel NICHT OK: ofdbgw.h1915283.stratoserver.net/movie/4425

    Ich sehe keinen Fehler in den betreffenden XML-Ergebnissen.

    Mein Code zum Einlesen ins Dataset:

    VB.NET-Quellcode

    1. Dim WebRequest As HttpWebRequest = DirectCast(Net.WebRequest.Create("http://ofdbgw.h1915283.stratoserver.net/movie/" & vID), HttpWebRequest)
    2. Dim WebResponse As HttpWebResponse = Nothing
    3. WebResponse = DirectCast(WebRequest.GetResponse(), HttpWebResponse)
    4. Dim DSWeb2 As DataSet = New DataSet()
    5. DSWeb2.ReadXml(WebResponse.GetResponseStream)


    ich kapiers einfach nicht...und hoffe auf eure Hilfe
    mlG, Ludwig
    Danke für die Info

    Jedoch denke ich, dass nicht das Schema oder die Stuktur der empangenen XML das Problem ist, sondern der Inhalt.
    Das Schema und die Struktur ist immer dieselbe...nur der Inhalt ändert sich.
    Und daher glaube ich, dass z.B. am Text irgendwelche Zeichen sind, die die Sturktur zerwürfeln und daher den Import ins Dataset verhindern.
    Ich werds daher analysieren..
    thx
    ich denke, an den Daten liegts eher nicht, jdfs. nicht, wenn das ein professioneller Informationsdienst ist.
    Also liegts an deim Datenmodell, in das du die Daten zu laden suchst.

    Ich denke, wenn das bei manchen Movies in ein Dataset geht, bei anderen nicht, dann war das mit dem Dataset eher Glücksache. Ist nämlich sehr selten - soweitichweiß - , dass InformationsDienste serialisierte Datasetse verschicken.

    Meist ists ganz speziell strukturierter Xml-Code, und wie der strukturiert ist, ist in Extra-Dateien definiert, sog. Xsd-Dateien.
    Und mit dem Xsd-Tool kann man sich aus einer Xsd-Datei eine Klassen-Struktur generieren lassen, und dann hat man ein Datenmodell, was mittels Xml-Serialisierung zuverlässig aus dem Xml-Code zu befüllen ist.

    Also Xml: Daten des Herstellers
    Xsd: Daten-Struktur-Beschreibung des Herstellers
    Xsd-Tool: Generator für taugliche Klassenstruktur

    Dataset: eher untaugliche Klassenstruktur

    Im Xml-Code finden sich auch Verweise, wo der Hersteller die Xsd bereitstellt.

    Also prinzipiell ist an alles gedacht, wenns mit rechten Dingen zugeht (was nicht immer der Fall ist).
    Selbst analysieren solltest du besser nichts - das wäre höchst unzuverlässig.
    Es ist Hersteller-Sache, seine Datenstruktur verlässlich zu dokumentieren.
    Hi
    ...ist schon klar
    Ich arbeite ausnahmslos mit strong-dyped datasets.
    Mir gings ja nur um das Problem, dass ich der o.a. Web-XML die entsprechenden Daten entnehmen kann.
    Beim direkten Import der XML-Struktur in ein temp. Dataset gabs ja die die beschriebenen Probleme, so dass ein Import unmöglich war.
    Jetzt importiere ich die Web-XML in einen string und danach in die .net XML Struktur...das klappt immer tadellos solange die Struktur (Aufbau der Nodes) zu großen Teilen bekannt ist...und die o.a. Struktur ist mir bekannt.
    Mit LINQ-XML gibts da kein Problem, denn selbst wenn mal die eine oder andere Node (z.B. WebXML.<root>.<results>.<regie>.<name>.value) nicht vorhanden ist, dann erhalte ich im schlimmsten Fall als Ergebnis einen Leerstring...und keinen Error.
    Die Übernahme in mein Dataset ist dann kein Problem.
    So wähle ich in meiner Application die Auswahl [Neuen Film hinzufügen] und gebe nur den mir bekannten Titel ein.
    Die restlichen Informationen wie Original-Titel, Jahr, Cast, Cover, etc. soll automatisch aus dem Internet kommen.
    Und wenn ich den Film tatsächlich besitze, dann spielt mir MediaInfo.dll alle technischen Daten zu.
    So soll es auch sein.
    Greets