none
ListView und XmlDataSource. Fehler abfangen RRS feed

  • Frage

  • Hallo zusammen,

    seit 2 Stunden bin an suchen, wie man Fehler von ListView und XmlDataSource abfangen.

    Ich habe XmlDataSource an ListView angebunden. Es passiert auf Page_Load. Das klappt wundebar. Doch eine Problem besteht. Das sind Fehler:

    1. XML-File existiert nicht. Das kann man einfach abfangen. Vordem Anbinden einfach prüfen, ob die Datei in vorgegebenen Pfad vorhanden

    2. XML-File korrupt. Hie habe ich Problem. Ich habe versucht in PreRender von ListView und XmlDataSources so was zu machen:

     

     

          try
          {
            xmldProducts.DataFile = "App_Data/cat" + Request.QueryString["cat"].ToString() + ".xml";
            xmldProducts.DataBind();
            lvwProducts.DataBind();
    
          }
          catch (Exception)
          {
            //xmlProducts.Visible = false;
            lblWarnings.Visible = true;
            lblWarnings.Text = GetGlobalResourceObject("Warnings", "w0002").ToString(); ;
          }
    

    Es hilft leider nicht. Es wird später als Page_Load gemacht. Hat jemand eine elegantere Idee dafür.

    Danke

    Sonntag, 27. Februar 2011 13:07

Antworten

  • Hi,

     

    vielleicht ein kleiner Denkanstoss:

    protected void Page_Load(object sender, EventArgs e)
      {
       if (Request.QueryString["Cat"] != null || Request.QueryString["Cat"] != string.Empty)
       {
        XmlDocument xml = new XmlDocument();
    	   xml = GetValidXMLContent(Server.MapPath(string.Concat("/App_Data/cat/", Request.QueryString["cat"], ".xml")))
        if (xml != null)
    	   {
    		   lvwProducts.DataSource = xml;
         lvwProducts.DataBind();
    	   }
        else
        {
         lvwProducts.Visible = false;
         lblWarnings.Visible = true;
         lblWarnings.Text = "XML Document Fehlerhaft...";
        }
       }
    
      }
    
      private XmlDocument GetValidXMLContent(string strFilePath)
      {
       if (File.Exists(strFilePath))
       {
        using (StreamReader sr = new StreamReader(strFilePath))
        {
    
         XmlDocument xml = new XmlDocument();
         xml.LoadXml(sr.ReadToEnd());
         return xml;
        }
       }
       else
       {
        return null;
       }
      }
    

    Alternativ kannst du auch den XML Reader benutzen:

    In deinem Fall:

    Den xmlString musst du natürlich wie im Beispiel oben laden.

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ConformanceLevel = ConformanceLevel.Fragment;
    XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);
    
    xmldProducts.Load(reader);
    
    

    Quelle: http://msdn.microsoft.com/en-us/library/6bts1x50.aspx

    Viele Grüße

    Timo

    • Bearbeitet SharePoint Rocker Sonntag, 27. Februar 2011 16:44 fix
    • Als Antwort markiert andrej75 Sonntag, 27. Februar 2011 17:36
    Sonntag, 27. Februar 2011 16:05

Alle Antworten

  • Hi,

     

    vielleicht ein kleiner Denkanstoss:

    protected void Page_Load(object sender, EventArgs e)
      {
       if (Request.QueryString["Cat"] != null || Request.QueryString["Cat"] != string.Empty)
       {
        XmlDocument xml = new XmlDocument();
    	   xml = GetValidXMLContent(Server.MapPath(string.Concat("/App_Data/cat/", Request.QueryString["cat"], ".xml")))
        if (xml != null)
    	   {
    		   lvwProducts.DataSource = xml;
         lvwProducts.DataBind();
    	   }
        else
        {
         lvwProducts.Visible = false;
         lblWarnings.Visible = true;
         lblWarnings.Text = "XML Document Fehlerhaft...";
        }
       }
    
      }
    
      private XmlDocument GetValidXMLContent(string strFilePath)
      {
       if (File.Exists(strFilePath))
       {
        using (StreamReader sr = new StreamReader(strFilePath))
        {
    
         XmlDocument xml = new XmlDocument();
         xml.LoadXml(sr.ReadToEnd());
         return xml;
        }
       }
       else
       {
        return null;
       }
      }
    

    Alternativ kannst du auch den XML Reader benutzen:

    In deinem Fall:

    Den xmlString musst du natürlich wie im Beispiel oben laden.

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ConformanceLevel = ConformanceLevel.Fragment;
    XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);
    
    xmldProducts.Load(reader);
    
    

    Quelle: http://msdn.microsoft.com/en-us/library/6bts1x50.aspx

    Viele Grüße

    Timo

    • Bearbeitet SharePoint Rocker Sonntag, 27. Februar 2011 16:44 fix
    • Als Antwort markiert andrej75 Sonntag, 27. Februar 2011 17:36
    Sonntag, 27. Februar 2011 16:05
  • Danke für die Anleitung. Es wird leider ein Fall damit nicht abgedeckt. Der XML Struktur ist OK, aber ein Knote hat falsche Name. Deswegen möchte ich es gerne durch try-catch.
    Sonntag, 27. Februar 2011 17:36
  • Okay, solltest du benutzen, sonst knallt es :) habe das nur so hierrein getippt :)
    Montag, 28. Februar 2011 20:49