none
XMLDocument.Parse genera "NotSupportedException" RRS feed

  • Pregunta

  •  Buenas,

    Tengo una app en WP7 que descarga de forma asíncrona un XML con una instancia de WebClient. Una vez obtenido el XML quiero coger sus elementos mediante LINQ to XML.

          WebClient wc = new WebClient();

                wc.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
                wc.DownloadStringCompleted += HttpsCompleted;
                wc.DownloadStringAsync(new Uri(http://mixml));

     Para ello hago algo tan simple como XDocument.Parse, pero el maldito genera la NotSupportedException, sin dar mucha más información

    private void HttpsCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                if (e.Error == null)
                {
                    XDocument document = XDocument.Parse(e.Result);

                    // aquí iría el LINQ to XML    
    }
            }

     El StackTrace tampoco es muy generoso en cuanto a información ofrecida se refiere...

       at System.Xml.XmlTextReaderImpl.ParseAttributeValueSlow(Int32 curPos, Char quoteChar, NodeData attr)
       at System.Xml.XmlTextReaderImpl.ParseAttributes()
       at System.Xml.XmlTextReaderImpl.ParseElement()
       at System.Xml.XmlTextReaderImpl.ParseElementContent()
       at System.Xml.XmlTextReaderImpl.Read()
       at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
       at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
       at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
       at System.Xml.Linq.XDocument.Parse(String text, LoadOptions options)
       at System.Xml.Linq.XDocument.Parse(String text)
       at myApp.MainPage.HttpsCompleted(Object sender, DownloadStringCompletedEventArgs e)
       at System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e)
       at System.Net.WebClient.DownloadStringOperationCompleted(Object arg)
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at System.Delegate.DynamicInvokeOne(Object[] args)
       at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
       at System.Delegate.DynamicInvoke(Object[] args)
       at System.Windows.Threading.DispatcherOperation.Invoke()
       at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
       at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
       at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
       at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
       at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

    A álguien se le ocurre cuál es el orígen del problema? Yo creo que es el formato del XML, porque algunos días he llegado a leerlo bien. Eso me hace pensar que el XML cambia, y algun dato no le "gusta" a .net, cómo saber cuál es?

     

    gracias! y un saludo


    Jesús Bosch Aiguadé
    MSP - MCPD
    http://geeks.ms/blogs/jbosch
    martes, 22 de febrero de 2011 5:38

Respuestas

  • Buenas Jesus, ya ves.... insomnio que tiene uno ;P

    La verdad es que no debería cascar... quizas es una cuestión del encoding del archivo... yo procesando rss me he encontrado con valores de todo tipo: & < > ... y no me ha fallado...

    :S

     


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Marcado como respuesta Jesús Bosch martes, 22 de febrero de 2011 7:41
    martes, 22 de febrero de 2011 6:33
    Moderador

Todas las respuestas

  • Buenas Jesus!

    Yo uso el XDocument parse con XML RSS 2.0 y ATOM y funciona de perlas... quizás el problema está en el xml que te está llegando... ¿podemos verlo?

    Un saludo campeon!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    martes, 22 de febrero de 2011 6:16
    Moderador
  • Joer Josue, que madrugador eres xD

    El problema está en el XML: había algo así como atributo="pepe & lola" en el XML. El símbolo & lo hacía "cascar".

    He hecho un "replace" "a saco" del símbolo, pero qué otros símbolos pueden hacer cascar el XML? me parece algo muy delicado...

     

    He identificado la línea y columna exactas que causaban el error gracias al generador de XSD de la linea de comandos de visual studio... al intentar generar el XSD me ha dado toda la info.

     

    Saludos


    Jesús Bosch Aiguadé
    MSP - MCPD
    http://geeks.ms/blogs/jbosch
    martes, 22 de febrero de 2011 6:21
  • Buenas Jesus, ya ves.... insomnio que tiene uno ;P

    La verdad es que no debería cascar... quizas es una cuestión del encoding del archivo... yo procesando rss me he encontrado con valores de todo tipo: & < > ... y no me ha fallado...

    :S

     


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Marcado como respuesta Jesús Bosch martes, 22 de febrero de 2011 7:41
    martes, 22 de febrero de 2011 6:33
    Moderador
  •           Yo uso esto:
     WebClient wc = new WebClient();
          wc.DownloadStringAsync(new Uri("http://mixml"));
          wc.DownloadStringCompleted += (s, a) =>
          {
            if (a.Result != null)
            {
              // = a.Result;
              //XDocument xDoc = XDocument.Parse(a.Result);
              XElement xEle = XElement.Parse(a.Result);
    		}
    	}
    
    Funciona muy bien.
    martes, 22 de febrero de 2011 7:22