Zum Inhalt springen

Warum wird meint Eintrag nicht in die xml Datei geschrieben?


lempy

Empfohlene Beiträge

Hallo Leute

Bin gerade dabei ein Programm zu schreiben, dass Einträge in einer TextBox in eine Listbox übergibt und anschließend den Inhalt der Listbox in eine XML Datei speichert. Das Schreiben in die TextBox und das Übernehmen in die Listbox mittels eines Buttons funktioniert. Der Inhalt in der Listbox soll dann über einen Button in einer XML Datei gespeichert (geschrieben) werden. Und genau da liegt der Hase im Pfeffer begraben. Er listet mir zwar die Anzahl der Einträge auf, aber er schreibt nicht meine Einträge in den "Text" Tag.

So sieht meine XML Datei aus:

<?xml version="1.0" encoding="UTF-8"?>

-<eintraege>

-<eintrag>

<text>System.Windows.Forms.ListBox+ObjectCollection</text>

</eintrag>

-<eintrag>

<text>System.Windows.Forms.ListBox+ObjectCollection</text>

</eintrag>

-<eintrag>

<text>System.Windows.Forms.ListBox+ObjectCollection</text>

</eintrag>

</eintraege

Was ist da schief gelaufen? Keine Ahnung.

Das ist mein Code:


#pragma once



namespace aufgabe3 {


	using namespace System;

	using namespace System::ComponentModel;

	using namespace System::Collections;

	using namespace System::Windows::Forms;

	using namespace System::Data;

	using namespace System::Drawing;

	using namespace System::Xml;


	/// <summary>

	/// Zusammenfassung für Form1

	///

	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch

	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,

	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.

	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen

	///          arbeiten, die diesem Formular zugewiesen sind.

	/// </summary>

	public ref class Form1 : public System::Windows::Forms::Form

	{

	public:


		// Eigene Attributte


		// Für den Dateiname 

		String ^xmlDateiname;		


		Form1(void)

		{

			InitializeComponent();

			//

			//TODO: Konstruktorcode hier hinzufügen.

			//			


			// setzen des Dateinamens

			xmlDateiname = IO::Path::ChangeExtension(Application::ExecutablePath,".xml");


		}


	protected:

		/// <summary>

		/// Verwendete Ressourcen bereinigen.

		/// </summary>

		~Form1()

		{

			if (components)

			{

				delete components;

			}

		}

	private: System::Windows::Forms::ListBox^  listBox1;

	protected: 

	private: System::Windows::Forms::TextBox^  textBox1;

	private: System::Windows::Forms::Button^  buttonUebernehmen;


	private: System::Windows::Forms::Button^  buttonSpeichern;



	private:

		/// <summary>

		/// Erforderliche Designervariable.

		/// </summary>

		System::ComponentModel::Container ^components;


#pragma region Windows Form Designer generated code

		/// <summary>

		/// Erforderliche Methode für die Designerunterstützung.

		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.

		/// </summary>

		void InitializeComponent(void)

		{

			this->listBox1 = (gcnew System::Windows::Forms::ListBox());

			this->textBox1 = (gcnew System::Windows::Forms::TextBox());

			this->buttonUebernehmen = (gcnew System::Windows::Forms::Button());

			this->buttonSpeichern = (gcnew System::Windows::Forms::Button());

			this->SuspendLayout();

			// 

			// listBox1

			// 

			this->listBox1->FormattingEnabled = true;

			this->listBox1->Location = System::Drawing::Point(12, 12);

			this->listBox1->Name = L"listBox1";

			this->listBox1->Size = System::Drawing::Size(144, 225);

			this->listBox1->Sorted = true;

			this->listBox1->TabIndex = 0;

			// 

			// textBox1

			// 

			this->textBox1->Location = System::Drawing::Point(172, 12);

			this->textBox1->Name = L"textBox1";

			this->textBox1->Size = System::Drawing::Size(119, 20);

			this->textBox1->TabIndex = 1;

			// 

			// buttonUebernehmen

			// 

			this->buttonUebernehmen->Location = System::Drawing::Point(172, 69);

			this->buttonUebernehmen->Name = L"buttonUebernehmen";

			this->buttonUebernehmen->Size = System::Drawing::Size(119, 23);

			this->buttonUebernehmen->TabIndex = 2;

			this->buttonUebernehmen->Text = L"Eintrag Übernehmen";

			this->buttonUebernehmen->UseVisualStyleBackColor = true;

			this->buttonUebernehmen->Click += gcnew System::EventHandler(this, &Form1::buttonUebernehmen_Click);

			// 

			// buttonSpeichern

			// 

			this->buttonSpeichern->Location = System::Drawing::Point(172, 107);

			this->buttonSpeichern->Name = L"buttonSpeichern";

			this->buttonSpeichern->Size = System::Drawing::Size(119, 23);

			this->buttonSpeichern->TabIndex = 3;

			this->buttonSpeichern->Text = L"Liste Speichern";

			this->buttonSpeichern->UseVisualStyleBackColor = true;

			this->buttonSpeichern->Click += gcnew System::EventHandler(this, &Form1::buttonSpeichern_Click);

			// 

			// Form1

			// 

			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

			this->ClientSize = System::Drawing::Size(297, 261);

			this->Controls->Add(this->buttonSpeichern);

			this->Controls->Add(this->buttonUebernehmen);

			this->Controls->Add(this->textBox1);

			this->Controls->Add(this->listBox1);

			this->Name = L"Form1";

			this->Text = L"Form1";

			this->ResumeLayout(false);

			this->PerformLayout();


		}


#pragma endregion

	private: System::Void buttonUebernehmen_Click(System::Object^  sender, System::EventArgs^  e) 

			 {

				 listBox1->Items->Add(Convert::ToString(textBox1->Text));

			 }


	private: System::Void buttonSpeichern_Click(System::Object^  sender, System::EventArgs^  e) 

			 {

				// die Einstellungen setzen

				 XmlWriterSettings ^einstellungen = gcnew XmlWriterSettings;


				 einstellungen->Indent = true;


				 xmlDateiname = "liste.xml";


				 // Die Datei erzeugen

				 XmlWriter ^xmlSchreiben = XmlWriter::Create(xmlDateiname, einstellungen);


				 xmlSchreiben->WriteStartDocument();


				 // Die Wurzel schreiben

				 xmlSchreiben->WriteStartElement("eintraege");				


				 for (Int32 i = 0; i < listBox1->Items->Count; i++)

				 {

					 // den Knoten eintrag erzeugen

					 xmlSchreiben->WriteStartElement("eintrag");

					 // die Einträge schreiben

					 xmlSchreiben->WriteElementString("text",listBox1->Items->ToString());

					 // den Knoten abschließen

					 xmlSchreiben->WriteEndElement();

				 }					


				 xmlSchreiben->WriteEndDocument();


				 xmlSchreiben->Close();

			 }

};

}



Lieben Dank für Eure Hilfe


lempy


Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit Items.ToString() gibst du den Typ der Collection als String aus, was völlig korrekt eine "System.Windows.Forms.ListBox+ObjectCollection" ist.

Du musst über deine Iterationsvariable auf den aktuellen index zugreifen und dir dessen Text ausgeben lassen. Also listbox1.Items.PropertyDasDuAusgeben willst.

Gruß, Goulasz

P.S.: Das ganze dürfte sich auch ohne Schleife als LINQ-Ausdruck beschreiben lassen.

P.P.S.: Design und Logik in einem Dokument ist bäh.

Bearbeitet von Goulasz
Link zu diesem Kommentar
Auf anderen Seiten teilen

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