geloescht_Henriette Geschrieben 21. Januar 2009 Geschrieben 21. Januar 2009 Hi Wer kann mir bei folgendem Problem helfen. Bin leider etwas ratlos. Ich möchte aus einer XML-Datei nur bestimmte Knoten (lehrer) einlesen und diese in einer GridView anzeigen lassen. Wenn ich das ganze in eine ListBox einfügen würde gehts. Aber ich brauche die GridView für eine spätere Verarbeitung. Meine XML-Datei: <?xml version="1.0" encoding="utf-8"?> <schule> <name>Werner-Siemens-Schule</name> <anz_lehrer>2</anz_lehrer> <lehrer> <l_name>Mueller</l_name> <l_vorname>Hans</l_vorname> <l_zimmer>15</l_zimmer> </lehrer> <lehrer> <l_name>Mayer</l_name> <l_vorname>Maria</l_vorname> <l_zimmer>9</l_zimmer> </lehrer> </schule> Folgenden Code habe ich: XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("Test.xml")); XmlNodeList nodeList = doc.SelectNodes("/schule/lehrer"); //StreamWriter writer = new StreamWriter(); foreach (XmlNode node in nodeList) { //writer.Write(node.InnerXml); ListBox1.Items.Add(node.InnerText.ToString()); } //---fuer StreamWriter--- //DataSet ds = new DataSet(); //ds.ReadXml(writer.ToString()); //GridView1.DataSource = ds.Tables[0]; //GridView1.DataBind(); Wenn ich nun den auskommentierten Code wieder reinmache und das mit der ListBox auskommentiere, gehts nicht. Fehlermeldungen bei folgenden Versuchen: 1. StreamWriter writer = new StreamWriter(); -> CS1729: "System.IO.StreamWriter" enthält keinen Konstruktor, der 0-Argumente akzeptiert. 2. StreamWriter writer = null; writer.Write(node.InnerXml); -> "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." Was mache ich falsch? Gruß Henriette Zitieren
Guybrush Threepwood Geschrieben 21. Januar 2009 Geschrieben 21. Januar 2009 Was mache ich falsch? Das was in der ersten Fehlermeldung steht, du kannst einen Streamwriter nicht so anlegen. Wie das geht steht in der Doku zum Streamwriter Zitieren
geloescht_Henriette Geschrieben 21. Januar 2009 Autor Geschrieben 21. Januar 2009 Aber wie soll ich den StreamWriter dann anlegen? Ich weiß doch zu diesem Zeitpunkt noch gar nicht was drinnen steht. Zitieren
TDM Geschrieben 21. Januar 2009 Geschrieben 21. Januar 2009 Aber wie soll ich den StreamWriter dann anlegen? Wie das geht steht in der Doku zum Streamwriter (Guckst du hier.) btw: Folgenden Code habe ich: XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("Test.xml")); XmlNodeList nodeList = doc.SelectNodes("/schule/lehrer"); //StreamWriter writer = new StreamWriter(); foreach (XmlNode node in nodeList) { //[COLOR="Red"]writer.Write(node.InnerXml);[/COLOR] ListBox1.Items.Add(node.InnerText.ToString()); } //---fuer StreamWriter--- //DataSet ds = new DataSet(); [COLOR="Red"]//ds.ReadXml(writer.ToString());[/COLOR] //GridView1.DataSource = ds.Tables[0]; //GridView1.DataBind(); Warum so umständlich? DataSet.ReadXml-Methode (XmlReader) (System.Data) XmlReader-Klasse (System.Xml) :floet: Zitieren
geloescht_Henriette Geschrieben 21. Januar 2009 Autor Geschrieben 21. Januar 2009 (Guckst du hier.) Ein "StreamWriter (XXX)" erwartet immer einen Wert in der Klammer. Nur, was schreiben, wenn ich gar nichts habe? Warum so umständlich? DataSet.ReadXml-Methode (XmlReader) (System.Data) XmlReader-Klasse (System.Xml) :floet: Ich hatte ursprünglich folgenden Code: XmlReader myXmlReader = XmlReader.Create(Server.MapPath("Test.xml")); DataSet ds = new DataSet(); ds.ReadXml(myXmlReader); myXmlReader.Close(); GridView1.DataSource = ds; GridView1.DataBind(); ASPX: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand" GridLines="None"> <Columns> <asp:BoundField HeaderText="Name von" DataField="l_name" /> <asp:BoundField HeaderText="Vorname" DataField="l_vorname" /> <asp:BoundField HeaderText="Zimmer" DataField="l_zimmer" /> <asp:ButtonField CommandName="Strada" Text="übernehmen"/> </Columns> </asp:GridView> Problem hier war, dass mir das GridView nicht angezeigt wurde. Erst als ich um <name>Werner-Siemens-Schule</name> <anz_lehrer>2</anz_lehrer> auch das Tag "<lehrer>" gemacht habe, wurde das GridView angezeigt. Allerdings mit einer Leerzeile. Auch wenn ein Tag fehlte, z.B. <l_zimmer> (nicht jeder Lehrer hat ein eigenes Zimmer) wurde mir der Inhalt nicht angezeigt. Daher dachte ich, dass für mich eher XmlDocument und XmlNodeList in Frage kommen würde. Habt Ihr einen Tipp wie ich einfach nur die blöden Unterknoten in das GridView bekomme unabhängig vom Haupknoten und egal, ob ein Element im Unterknoten leer ist oder nicht? Mache nun schon seit einer Woche dran rum. Und so schwer kann das alles doch gar nicht sein... Zitieren
U-- °LoneWolf° Geschrieben 28. Januar 2009 Geschrieben 28. Januar 2009 hm eventuel solltest du einen eigenen knoten aufbauen so alla <lehrerliste> <lehrer>...</lehrer> ... </lehrerliste> oder arbeite die lehrerlsite in einem zwischenschritt in ein eigenes xmlDocumnet um das geht recht einfach über Importnode... achja und tritt das problem der fehlenden zeile auf wenn du den knoten nciht hast oder wenn der knoten kneinen inhalt besitzt? den der knoten muss da sein selbst wenn er keinen wert hat Zitieren
geloescht_Henriette Geschrieben 30. Januar 2009 Autor Geschrieben 30. Januar 2009 Hallo U[[ °LoneWolf°. Danke für Deine Antwort. So habe ich das nun auch gelöst. Alles in ein XmlDocument gelesen und das ganze dann mit XmlNodeList und einer Schleife ausgelesen. Das ganze habe ich dann in einen Stream gelesen und das an das DataSet übergeben. So konnte ich endlich meine GridView nur mit den gewünschten Feldern füllen. Das Problem der fehlenden Zeile kam, wenn der Knoten nicht vorhanden war. Ist mir aber ein Rätsel warum es nun tut. Das Visual Studio 2008 hat manchmal echt komische Macken... Vielen Dank an alle. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.