Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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:

Geschrieben

Ein "StreamWriter (XXX)" erwartet immer einen Wert in der Klammer. Nur, was schreiben, wenn ich gar nichts habe?

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... :(

Geschrieben

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

Geschrieben

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. :)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...