ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
1149
1149
EMPFEHLEN
-
21.11.09 12:37 #1Klinge19 Tutorials.de Gastzugang
Hi @ll,
Ich habe eine XML Datei geschriben mit folgenem Aufbau.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Adressbuch>
<Adresse>
<Vorname>Hans - Peter</Vorname>
<Nachname>Meyer</Nachname>
.........
</Adresse>
</Adressbuch>
XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"___________.xml", System.Text.Encoding.UTF8);
myXmlTextWriter.Formatting = Formatting.Indented;
myXmlTextWriter.WriteStartDocument(true);
myXmlTextWriter.WriteStartElement("Adressbuch");
myXmlTextWriter.WriteStartElement("Adresse");
myXmlTextWriter.WriteElementString("Vorname", VornameFeld.Text);
myXmlTextWriter.WriteElementString("Nachname", NachnameFeld.Text);
myXmlTextWriter.WriteEndElement();
myXmlTextWriter.Flush();
myXmlTextWriter.Close();
nun wollte ich über mein Programm noch einen Eintrag in die XMl Datei machen.
Problem ist nun. Wie füge ich unter <Adresse> z.b. <Adresse2> ein.
XmlDocument doc = new XmlDocument();
doc.Load(@"Cyberdog\Settings.xml");
XmlElement root = doc.DocumentElement;
//
//Füge hinter dem letzten Punkt die Daten ein
//
Ab hier finde ich leider nichts passendes bei google mehr.
Würde mich über Hilfe freuen.
-
Die passendste Vorgehensweise für deine XML-Daten ist wahrscheinlich, die Daten über eine DataTable oder ein DataSet zu bearbeiten. Im Anhang sind Beispielprogramme, die du noch für deine Zwecke anpassen musst, die zeigen, wie so etwas bewerkstelligt werden kann.
Außerdem empfehle ich dir das C# Codebook, wo auch viele andere nützliche Tipps vorgestellt werden.
-
30.11.09 13:54 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Naja, ein DataSet ist doch wohl etwas overkill, oder?!
KISSGrußCode csharp:1 2 3 4
var addr = doc.CreateElement("Adresse2"); root.AppendChild(addr); addr.AppendChild(doc.CreateElement("Name"); ..
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Nicht unbedingt. Deine Variante ist natürlich die kürzeste und naheliegendste, aber bei einem DataSet sind die Möglichkeiten für Suchanfragen, Sortierungen und Anzeigen z.B. via DataGridView wesentlicher größer und flexibler.
Dennoch: für ein straight-away-Programm ist deine Methodik wohl am einfachsten zu implementieren.
Es ist eben alles eine Geschmacksfrage.
-
06.12.09 16:30 #5Klinge19 Tutorials.de Gastzugang
Danke für eure Antworten.
Leider löste es immenroch nicht mein Problem.
Habe das Gefühl, das ich voll auf dem Schlauch stehe und den Wald vor lauter Bäumen nicht mehr sehe.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
if (File.Exists(@"C:\\Eintragungen.xml") == false) { //Dataset erzeugen und initialisieren DataSet dataSet = new DataSet(); dataSet.DataSetName = "Person"; dataSet.Namespace = "http://"; //Tabelle erzeugen DataTable dataTable = dataSet.Tables.Add("Person"); //Spalten definieren dataTable.Columns.Add("id", typeof(int)); dataTable.Columns.Add("Vorname", typeof(string)); dataTable.Columns.Add("Nachname", typeof(string)); dataTable.Columns.Add("Name_Komplett", typeof(string)); dataTable.Columns.Add("Spitzname", typeof(string)); dataTable.Columns.Add("Email", typeof(string)); dataTable.Columns.Add("Email_Zwei", typeof(string)); dataTable.Columns.Add("Haustelefon", typeof(string)); dataTable.Columns.Add("Handy", typeof(string)); dataTable.Columns.Add("Fax", typeof(string)); /* * ... */ //Zeilen definieren dataTable.Rows.Add(new object[] { 1, VornameFeld.Text, NachnameFeld.Text, NameKomplettFeld.Text, SpitznameFeld.Text, EmailFeld.Text, EmailFeldzwei.Text, TelefonHausFeld.Text, HandyFeld.Text, FaxFeld.Text} ); dataTable.Rows.Add(new object[] { 2, VornameFeld.Text, NachnameFeld.Text, NameKomplettFeld.Text, SpitznameFeld.Text, EmailFeld.Text, EmailFeldzwei.Text, TelefonHausFeld.Text, HandyFeld.Text, FaxFeld.Text} ); //XML-Datei mit Schema schreiben try { dataSet.WriteXml(xmlFileName, XmlWriteMode.WriteSchema); } catch(System.Exception) { } }
// Bis hier her ist alles komplett klar
---------------------------------------------------------------------
//Ab hier beginnt immernoch leider mein Problem
----------------------------------------------------------------------------------Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
else { //ID auslesen //ID um 1 erhöhen //ID speichern //XML Datensatz unter ID+1 speichern /* * Kann man anstatt immer ID mit 1000 zu vergeben auch * ID + 1 machen und dann danach immer einen Datensatz einfügen * und dann wieder * ID + 1 * * Wüsste sonst nicht, wie ich es lösen sollte */
//Mein Lösungsversuch,der aber allerdings immernoch scheitert, weil ich unter google nichts passendes finde. Irgendwie stehe ich auf dem Schlauch....
Code :1 2 3 4 5 6 7 8
//Dataset erzeugen und initialisieren DataSet dataset = new DataSet(); //zu lesende XML Datei bekanntgeben dataset.ReadXml(@"C:\\Cyberdog\\Eintragungen.xml"); //was bewirkt das DataTable DT = dataset.Tables["Person"];
-
Beim Schreiben scheinst du alles Richtig zu machen; du erzeugst ein DataSet, definierst eine Tabelle darin, füllst sie mit Datensätzen und speicherst sie ab.
Beim Abspeichern gibst du richtigerweise XmlWriteMode.WriteSchema an, aber über die Bedeutung scheinst du noch im unklaren zu sein.
Ein DataSet enthält Daten in strukturierter Form; welche Struktur die Daten haben, muss mit abgespeichert werden, damit beim Anlegen auch das DataSet korrekt wieder aufgebaut werden kann. Die Art, wie Daten in einer XML-Datei organisiert sind, wird Schema genannt; ein solches wird durch deinen Parameter automatisch erzeugt und geschrieben. Das Schema wird in einer gesonderten Datei gespeichert, die nicht <filename>.xml heißt, sondern <filename>.xsd.
Wie oben erwähnt braucht das DataSet die Schema-Informationen, um die richtigen Tabellen, Datentypen etc. zu erzeugen. Das musst du mit einem Aufruf der extra dafür vorhandenen Methode dataSet.ReadXmlSchema(xmlSchemaFileName) tun, danach kannst du die XML-Datei mit dataSet.ReadXml(xmlFileName) einlesen.
Ein DataSet ist ein so genannter komplexer Datentyp; es kann viele Daten auf einmal verwalten. Du kannst mehrere Tabellen auf einmal darin haben, Relationen zwischen ihnen definieren und anderes mehr. Wenn du auf eine spezielle Tabelle darin zugreifen willst, kannst du sie über die Tables-Auflistung per Index oder, noch sicherer, per Name ansprechen; dies tut die Zeile
Eine solche Tabelle kannst du auch als DataSource für z.B. ein DataGridView verwenden, das dir dann automatisch die darin enthaltenen Sätze anzeigt; auch editieren kannst du sie damit.Code csharp:1
DataTable DT = dataset.Tables["Person"];
Es ist übrigens empfehlenswert, der Übersichlichkeit halber dem DataSet einen anderen Namen zu geben als deiner Tabelle, z.B. "Adressbuch";
Wenn du einen Dateipfad mit einem String angeben willst hast du die Wahl, den String 'normal' anzugeben, wo du dann den Backslash '\' doppelt angeben musst (z.B. "C:\\Cyberdog\\irgendwas.xyz"), oder dem String einen Klammeraffen '@' voranstellst, damit du dir das Verdoppeln der Pfadtrenner ersparst (z.B. @"C:\Cyberdog\irgendwas.xyz"; dazu ist er nämlich da, beides zusammen geht nicht.
Hinsichtlich der ID ist zu überlegen, ob es für dich nicht besser ist, das Autoincrement zu nutzen. Eine DataColumn hat die Eigenschaften AutoIncrement (ermöglicht das automatische Vergeben und Erhöhen einer ID), AutoIncrementSeed (den Startwert für deine ID's) und AutoIncrementStep (um wieviel die ID jeweils erhöht werden soll); weitere Informationen findest du in der msdn-Library unter http://msdn.microsoft.com/de-de/libr...rs(VS.80).aspx. Unter Umständen ist es vielleicht auch nützlicher, den Datentyp GUID zu nutzen, aber darüber kannst du dir auch später noch Gedanken machen.
-
11.12.09 09:37 #7Klinge19 Tutorials.de Gastzugang
So ich habe nun mein Problem in den Griff bekommenund zwar so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
else { // Der Dateiname der XML-Datei string xmlFileName = (@"C:\Cyberdog\Eintragungen.xml"); // DataSet erzeugen und XML-Datei mit Schema einlesen DataSet dataSet = new DataSet(); try { dataSet.ReadXml(xmlFileName, XmlReadMode.ReadSchema); } catch (Exception ex) { MessageBox.Show("Fehler beim Lesen der XML-Datei: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // DataTable referenzieren DataTable personTable = dataSet.Tables["Person"]; if (personTable == null) { MessageBox.Show("Das XML-Dokument enthält keine person-Elemente", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // Zeile anfügen personTable.Rows.Add(new Object[] { VornameFeld.Text, NachnameFeld.Text, NameKomplettFeld.Text, SpitznameFeld.Text, EmailFeld.Text, EmailFeldzwei.Text, TelefonHausFeld.Text, HandyFeld.Text, FaxFeld.Text, StraßeNormalFeld.Text} ); try { xmlFileName = xmlFileName.Replace("Persons", "Persons_New"); dataSet.WriteXml(xmlFileName, XmlWriteMode.WriteSchema); } catch (Exception ex) { MessageBox.Show("Fehler beim Schreiben der XML-Datei: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } MessageBox.Show("Datensatz erfolgreich gespeichert."); this.Close(); } }
Den Vorangegangenen Code phabe ich hier ja schon gepostet.
Mit der laufenden Nummer schaue ich mal ob ich es hinbekomme.
Hast du deine XML Kenntnisse aus dem Netz ?
Finde dort sind die Infos ein wenig rar.
Danke an alle PosterGeändert von Klinge19 (11.12.09 um 11:32 Uhr)
Ähnliche Themen
-
CSS per Javascript löschen und hinzufügen bzw. ändern
Von Ghost123 im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 23.06.10, 09:17 -
Windows 2003 DHCP Einträge per Script hinzufügen
Von Vaiper im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 08.12.08, 12:42 -
Formularelement dynamisch hinzufügen / ändern
Von raikkonentk im Forum PHPAntworten: 4Letzter Beitrag: 13.06.07, 09:18 -
Einträge beim Untermenu eines Popups hinzufügen
Von Alex Duschek im Forum Delphi, Kylix, PascalAntworten: 11Letzter Beitrag: 29.10.05, 19:39 -
xpath - doppelte einträge ausschließen, informationen hinzufügen
Von SpassCola im Forum XML TechnologienAntworten: 1Letzter Beitrag: 07.09.05, 16:54





Zitieren
Login





