none
XDocument auf dem Phone 7. HTML/xHTML NotSupportedException RRS feed

  • Frage

  • Hi Leute, ich hoffe ihr könnt mir helfen.

    Ich möchte eine xhtml/html Seite mit dem XDocument von LINQ auslesen.

    Auf einem Desktopprogramm funktioniert alles sehr gut, wenn ich jedoch den Programmteil in die Handy App übertrage, bekomme ich eine NotSupportedException.

    Bin ratlos, wo das Probem liegt.

    Mit freundlichen Grüßen René

    schönes Wochenende



    Freitag, 18. März 2011 12:54

Antworten

  • Hallo zusammen,

    ohne den Thread komplett verfolgt zu haben mag ich eins zu bedenken geben: Silverlight ist lediglich ein Subset von WPF. Dies bedeutet im Umkehrschluss, dass das was in WPF funktioniert noch lange nicht in Silverlight funktionieren muss. Ob dies hier auf dieses Problem zutrifft weiß ich nicht, jedoch sollte man dies generell bedenken.

    Gruß, Peter


    This posting is provided "AS IS" with no warranties, and confers no rights.
    Freitag, 25. März 2011 07:18
  • Hallo Robert,

    Danke für den code.

    Ich weiß, dass der code von dem Speiseplan schwer zu parsen ist. Aber Ich dachte, da es in einer WPF-Anwendung funktionierte, würde es auch auf dem Phone funktionieren.

    Ich glaube nicht, dass es eine andere Möglichkeit käme, an den Speiseplan zu kommen. Ich über lege, die Teile, welche die Informationen enthalten aus dem String zu selektieren, und nur diese versuche zu parsen.

     

    Wenn noch Jemand eine Idee hat, immer her damit :)

    Mit Grüßen René

    Dienstag, 22. März 2011 14:30

Alle Antworten

  • Hallo René,

    poste doch mal ein bissel Code, damit man es eher nachvollziehen kann, woran es hapert. Es kann nämlich sein, dass eine NotSupportedException fälschlicher Weise geworfen wird. 

    Auch würde es helfen, wo die Exception und mit welchen Details sie geworfen wird.

    Freitag, 18. März 2011 14:38
  • Hallo Rene,

    zeig uns bitte Deinen Code. Die NotSupportedException  deutet daraufhin, dass Du etwas falsch implementierst.

    Schöne Grüße

    Oliver

    Freitag, 18. März 2011 14:42
  • Ihr habt recht, der Code wäre sicher hilfreich.

    Kurz zum Hintergrund: Es geht um meine erste Windows Phone Applikation. Ich hatte mir als Vorbild eine IPhone-App genommen, die den Speiseplan unserer Uni anzeigt.

     

    static public void loadData()
        {
          WebClient webClient = new WebClient();
          webClient.OpenReadAsync(new Uri("http://www.studentenwerk-pb.de/gastronomie/speiseplaene/mensa.html"));
          webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
    
        }
    
        static void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
    
          using (var reader = new StreamReader(e.Result))
          {
            String code = reader.ReadToEnd();
    
            code = code.Replace("ß", "ß");
            code = code.Replace("&euro", "€");
            XDocument doc = new XDocument();
            try
            {
              
              doc = XDocument.Parse(code);
              verarbeiteXML(doc);
    
            }
            catch (XmlException ex)
            {
    
            }
    
          }
    
        }
    

    Die Methode verarbeiteXML() würde dann denn XML-Code auseinander nehmen und die benötigten Daten herausziehen.

    Ich bekomme jedoch die NotSupportedException an der stelle:  doc = XDocument.Parse(code);

    In einer WPF-Anwendung lief es einwandfrei.

    Wenn ihr weitere Infos braucht, sagt bescheid :)

    Danke für eure Hilfe!

    Freitag, 18. März 2011 16:09
  • Moin,

    in deinem ersten Post schreibst du von XmlReader und nun nutzt du XDocument von LINQ. XDocument ist auf jeden Fall vom WP7 Silverlight supported. Bist du absolut sicher, dass der identische Code in der WPF-Anwendung funktioniert. Diese "NotSupportedException" hört sich für mich so an, als komme die vom Stream, da dieser sehr wahrscheinlich keine Suchvorgänge unterstützt.

    Poste doch mal deinen Stacktrace.

    Montag, 21. März 2011 07:09
  • Du hattest Recht, es war etwas verwirrend. Ich habe zumindest den Threadtitel geändert.

    Hier die Kopie:

         bei System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
    bei System.Xml.XmlTextReaderImpl.ParseDocumentContent()
    bei System.Xml.XmlTextReaderImpl.Read()
    bei System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
    bei System.Xml.Linq.XDocument.Parse(String text, LoadOptions options)
    bei System.Xml.Linq.XDocument.Parse(String text)
    bei UniPaderborn_App.DataLoader.webClient_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e)
    bei System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
    bei System.Net.WebClient.OpenReadOperationCompleted(Object arg)
    bei System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
    bei System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
    bei System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
    bei System.Delegate.DynamicInvokeOne(Object[] args)
    bei System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
    bei System.Delegate.DynamicInvoke(Object[] args)
    bei System.Windows.Threading.DispatcherOperation.Invoke()
    bei System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
    bei System.Windows.Threading.Dispatcher.OnInvoke(Object context)
    bei System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
    bei System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
    bei System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

    Montag, 21. März 2011 13:12
  • Hallo zusammen,

    ja das XDocument ist supported. Der StreamReader (die Betonung liegt auf StreamReader) arbeitet in SL im Gegensatz zu WPF aber nur in 100% Trusted Applications fehlerfrei (vielleicht versuchst Du mal einen StringReader). Ansonsten ist Dein Code augenscheinlich einwandfrei (ich weiss natürlich nicht was in "verarbeiteXML" passiert.

    Schöne Grüße

    Oliver

    Montag, 21. März 2011 14:27
  • Bekomme die gleiche Exception. Es scheint daran zu liegen, dass Der XDocument vom Phone anders mit dem html/xhtml code umgeht als bei einer wpf anwendung
    Montag, 21. März 2011 17:04
  • Hallo René Althoff - UNI Paderborn,

    Bitte schau Dir mal folgenden Code an für das Asynchrone herunterladen eines Strings:

    [C#, WP7]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Microsoft.Phone.Controls;
    using System.IO;
    using System.Text;
    
    namespace WindowsPhoneApplication1
    {
      public partial class MainPage : PhoneApplicationPage
      {
        // Constructor
        public MainPage()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          string sUrl;
    
          //Neues Web Request
          sUrl="http://www.studentenwerk-pb.de/gastronomie/speiseplaene/mensa.html";
          HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sUrl);
    
          //State Object für den Async Request
          WebRequestUpdateState webRequestState = new WebRequestUpdateState();
          webRequestState.AsyncWebRequest = webRequest;
    
          //Async Web Request starten
          webRequest.BeginGetResponse(new AsyncCallback(HandleGetWebPageResponse), webRequestState);
        }
    
        private void HandleGetWebPageResponse(IAsyncResult asyncResult)
        {
          string sWebPage = String.Empty;
    
          //State Info
          WebRequestUpdateState webRequestState = (WebRequestUpdateState)asyncResult.AsyncState;
    
          try
          {
            HttpWebRequest webRequest = (HttpWebRequest)webRequestState.AsyncWebRequest;
    
            //Async Request enden
            webRequestState.AsyncWebResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult);
    
            //Response Stream auslesen
            StreamReader streamReader = new StreamReader(webRequestState.AsyncWebResponse.GetResponseStream(), Encoding.UTF8);
            sWebPage = streamReader.ReadToEnd();
            streamReader.Close();
          }
          catch (Exception ex)
          {
            sWebPage = ex.Message;
          }
          finally
          {
            //Webseite verarbeiten
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
              webBrowser1.NavigateToString(sWebPage);
            });
          }
        }
    
        public class WebRequestUpdateState
        {
          public HttpWebRequest AsyncWebRequest { get; set; }
          public HttpWebResponse AsyncWebResponse { get; set; }
        } //
    
      }
    }
    

     

    Jetzt, schau Dir mal an diesen String (sWebPage). Wie denkst Du dass man so etwas mit XDocument leicht parsen kann?

    Hat die Uni nicht einen Service wo man die Speisekarte direkt als XML leicht auslesen kann?

    Jetzt schau Dir mal folgenden String an: http://social.msdn.microsoft.com/Forums/de-DE/wp7de/threads?outputas=xml …das geht schon viel leichter zu parsen mit dem XDocument.

     

    Grüße,

    Robert

    Dienstag, 22. März 2011 12:27
  • Hallo Robert,

    Danke für den code.

    Ich weiß, dass der code von dem Speiseplan schwer zu parsen ist. Aber Ich dachte, da es in einer WPF-Anwendung funktionierte, würde es auch auf dem Phone funktionieren.

    Ich glaube nicht, dass es eine andere Möglichkeit käme, an den Speiseplan zu kommen. Ich über lege, die Teile, welche die Informationen enthalten aus dem String zu selektieren, und nur diese versuche zu parsen.

     

    Wenn noch Jemand eine Idee hat, immer her damit :)

    Mit Grüßen René

    Dienstag, 22. März 2011 14:30
  • Hallo René Althoff - UNI Paderborn,

    Weil Du sagst dass „da es in einer WPF-Anwendung funktionierte“, glaube ich, relevanter Code (aus dieser WPF-Anwendung) zu posten wäre auch nicht schlecht oder eine .zip Datei mit den Code (falls der Code zu groß ist) kann man ihm Public Ordner von SkyDrive laden und den link hier Posten. (Wie nutze ich den SkyDrive?)

    Grüße,

    Robert

    Donnerstag, 24. März 2011 08:13
  • Hallo zusammen,

    ohne den Thread komplett verfolgt zu haben mag ich eins zu bedenken geben: Silverlight ist lediglich ein Subset von WPF. Dies bedeutet im Umkehrschluss, dass das was in WPF funktioniert noch lange nicht in Silverlight funktionieren muss. Ob dies hier auf dieses Problem zutrifft weiß ich nicht, jedoch sollte man dies generell bedenken.

    Gruß, Peter


    This posting is provided "AS IS" with no warranties, and confers no rights.
    Freitag, 25. März 2011 07:18
  • Hat die Uni nicht einen Service wo man die Speisekarte direkt als XML leicht auslesen kann?

    Jetzt schau Dir mal folgenden String an: http://social.msdn.microsoft.com/Forums/de-DE/wp7de/threads?outputas=xml …das geht schon viel leichter zu parsen mit dem XDocument.

    Hallo René Althoff,

    Warum habe ich das obere geschrieben? Weil es so etwas gibt schon bei einer anderen Uni und man kann es sehr leicht auf den Windows Phone 7 anzeigen lassen:

    Uni Ulm App für Windows Phone 7

    http://www.uni-ulm.de/mensaplan/mensaplan.xml

    Könntest Du inzwischen Dein Problem lösen?

    Grüße,

    Robert

    Donnerstag, 26. Mai 2011 12:19