Hallo,
Vorweg, im Gebiet XML bin ich ein grosser Anfänger (Noob / Dau). Wie eine XML aufgebaut ist weiss ich schon und ich kenne auch die W3C Spetzifikation, aber wie ich praktisch XML Dateien in C# auslese und schreibe ist mir immernoch ein Rätsel.
Wenn ich hier im Forum suche oder auch in Google und auf MSDN bekomme ich haufen Klassen die zwar irgendwie alle das Gleiche machen aber doch total verschieden sind.
Ehrlich gesagt, nach vier Tagen Reserche gehts mir so langsam auf den Sack 😦...
Darum wollte ich mal nachfragen ob mir jemand irgendwie nen schlauen Link zu ner Übersicht der einzelnen .NET Klassen geben kann, bei welchem ich auch die Vor- und Nachteile sehe bzw. Links zu Tutorials wo mir XML einlesen und schreiben im Praktischen Einsatz gezeigt wird.
Meine Idee ist es die einzelnen Einstellungen eines Projektes, an dem ich dran bin, im XML Format zu speichern. Besonders im Hinblick auf das vermehrte verwenden von XML würde es nicht schaden sich mit der Thematik zu befassen.
Also, vielleicht hat ja jemand Zeit und Lust mich in die Welt von XML etwas einzuführen, würde mich freuen.
Mit freundlichen Grüssen,
Gregor Wegberg
p.s.: Wenn was gutes hier rauskommt, könnte man es ja Rhuig in die FAQ legen... Würde sicher nicht schaden
Zwei Einstiegspunkte:
Mit dieser Klasse kannst du ein Xml-File zeilenweise (!) auslesen. Vorteile: Einfach, schnell. Nachteil: Wenig mächtig, da nur zeilenbasiert. Read-Only.
Diese Klasse liest das File in einem Rutsch in ein Objekt. Das Objekt entspricht einem Baum. Du kannst dieses Objekt auslesen und auch verändern, also neue Knoten hinzufügen oder vorhandene löschen. Das Objekt kann dann auch wieder in einem Rutsch gespeichert werden. Nachteile treten bei der Verwendung von großen Xml-Dokumenten auf (hoher Speicherplatzbedarf). Auch bei XPath-Zugriffen ist es ggf. zu schwergewichtig (dazur gibts dann XPathDocument).
In der Hilfe - und auch im Netz - findest du Beispiele.
Danke für die super Antwort (noch dazu schön Kurz und klar 😄)...
Würde dann halt mal lieber was mit XMLDocument machen... mal schaun ob ich nen gutes Tutorial finde... noch siehts nicht rosig aus, aber wird sicher...
Danke nochma,
Gruss,
Gregor
Apropos XPath: Gibt es eigentlich auch eine Möglichkeit ein XPath-Query relativ
zu einem Node auszuführen? Es geht mir um folgendes: Ich habe eine Node-
Struktur, die einen Verzeichnisbaum darstellt und beliebig verschachtelt werden
kann. Ich gehe jetzt rekursiv durch die Nodes und führe jetzt jeweils das gleiche
Query ergänzt um ein "/folder" aus. Also sieht das Query nach einigen Ver-
schachtelungen so aus:
"//bookmarks/folder/folder/folder/[...]/folder[...]"
Das finde ich etwas unsauber, vor allem, da ich das Query per String übergeben
muss. Super wäre es jetzt halt, wenn ich das Query relativ zu einem Node
ausführen müsste, so dass jeweils das gleiche Query ausgeführt werden könnte
nur halt von einem neuen Node ausgehend.
Und bevor ihr vorschlagt, die Rekursion einfach durch das Query auszuführen via
"/folder[...]": Es ist für die Weiterverarbeitung für mich wesentlich praktischer
jede Ebene explizit auslesen zu können und nicht alles auf einen Schlag erledigen
zu müssen.
Danke schon mal 🙂
inTrance
Original von chritsch
Hallo GregorMicrosoft bietet eine Webcast-Serie zum Thema
> an. Vielleicht könnte das für dich interessant sein. Du musst dich aber anmelden.Gruss
Hitsch
Die kenne ich alle schon 🙂 Aber von den 8 Webcasts (ich glaubs es waren 8), habe ich keine gesehen in der es um die Praxis geht (Habe nur die ersten 3 angeschaut und die Beschreibung der anderen)... Wenn Du weisst in welchem gezeigt wird wie man XML Files mit XMLDocument auswerten kan... hätt ich nichts gegen 😁
Gruss,
Gregor Wegberg
@inTrance:
du kannst auf jedem beliebigen XmlNode SelectNodes ausführen. Also auch auf einer beliebigen Ebene.
XmlNode folderEbene1 = BookmarkDokument.SelectSingleNode("Bookmarks/Folder");
XmlNode folderEbene2 = folderEbene1.SelectSingleNode("Folder");
//usw.
P.S. ein neuer Thread wäre vl. übersichtlicher gewesen 😉
Original von tb
@inTrance:du kannst auf jedem beliebigen XmlNode SelectNodes ausführen. Also auch auf einer beliebigen Ebene.
XmlNode folderEbene1 = BookmarkDokument.SelectSingleNode("Bookmarks/Folder"); XmlNode folderEbene2 = folderEbene1.SelectSingleNode("Folder"); //usw.
Hm... Und ich dachte das hätte bei mir nicht funktioniert. Werd ich nochmal
ausprobieren 🙂
P.S. ein neuer Thread wäre vl. übersichtlicher gewesen 😉
Ich war auch stark am Hadern, ob ich nicht doch einen eigenen hätte erstellen
sollen 😁