C++ .Net, XML File in eine Variable speichern

fox40phil

Vice Admiral
Registriert
Okt. 2008
Beiträge
6.157
Hallöchen,

ich bin gerade dabei an der Arbeit ein Programm zu entwickeln welches unter anderem ein XML File einlesen muss und anschließend müssen gewisse Werte dadrin gesucht und in Variablen gespeichert werden.

Also ich bin jetzt dabei mit dem XmlDocument Objekt das File einzulesen.
Die Funktion "Load(String)" gibt aber leider nichts zurück.

Gibt es eine Möglichkeit die Datei einmal komplett einzulesen? Weil die ständigen File->Öffnen + Suchen + Schließen lassen das Programm ein paar Minuten stehen und das ist nicht so toll^^...

:) würde mich über Hilfe von euch freuen.

Ein schönes Wochenende und Grüße,

Phil
 
Also wenn du mit C# Programmierst, kannst du ein DataSet nehmen.

namespace ist System.Data

Dort gibt es ein DataSet Objekt.
Kannst dann also einfach ein DataSet objekt erstellen und dann die XML-Datei einlesen:


Dataset myDataSet = new DataSet();
myDataSet.ReadXml(@"C:\beispiel.xml");

Am Besten du guckst dir dann ein Bisschen an was DataSets sind und wie sie funktionieren.

Hoffe ich konnte dir weiterhelfen.

Viele Grüße
 
Wenn du dir jede Menge Arberit ersparen willst, empfehle ich dir dne XERCES XML Parser zu nutzen. Gibts Ports in jede erdenkliche Sprache oder willst du es unbedingt selber coden ?
 
danke für die fixe Antwort.

Ne ich muss es nicht unbedingt selbst coden^^, aber stimmt...jetzt fällts mir ein..nen Kollege hat ebenfalls so etwas gebastelt und dabei auch auf eine externe offene Lib zugegriffen.

Danke und schönes Wochenende, ich werde es mir am Montag mal in ruhe angucken :)...erst mal Feierabend
 
@toxn: Warum was fremdes reinholen wenn man die .NET integrierten Sachen nutzen kann?

@fox40phil: Schau dir mal das XDocument an und dazu direkt mal Linq-To-Xml damit kannst du ganz angenehm in XML-Dateien suchen und sachen rausfiltern.
 
das mit in einer Datei suchen ist ja kein Problem. Ich will aber die komplette Datei in einem Objekt haben, damit nicht ständig lese Zugriffe und damit lange Wartezeit zustande kommen.

alternativ zum XDocument hab ich "XmlDocument" gefunden, bei dem die Dokumentation für C++ weit aus besser ist und ich glaube die beiden können das selbe.
 
Such mal nach Serialisierung... LinqTo ist ganz nett, aber einfacher als Serialisierung geht nicht ;)
 
Einfach die Datei einmal öffnen, den Stream in eine String-Variable zwischenspeichern und die Datei wieder schließen. Dann liegt der Inhalt der Datei im Arbeitsspeicher und du kannst in dem String bequem suchen und es geht schneller. String sollten eigentlich alle XML-Parser bequem annehmen...

Die Datei sollte allerdings nicht all zu groß sein, musst schauen, ab wann es nicht mehr performant ist...
Eigentlich sollte es auch kein Problem sein, den Stream auszulesen und einfach zu parsen, was da als nächstes für ein Typ und Wert kommt und so nacheinander einmal durch zulaufen und die Datei anschließend wieder zu schließen.

Wenn die Datei sehr groß ist, kannste den Inhalt auch je nach Anzahl der Prozessorkerne splitten und parallel durchsuchen lassen... möglich ist da fast alles ;)

Zum Auslesen selbst wurde hier schon alles brauchbare genannt.
 
Linq to gibts für C++ nicht direkt, da muss man dann irg.wie CLinq to nehmen und dazu find ich keine Referenz -.-

Das mit dem String hatte ich schon mal probiert, ging aber irg.wie nicht so ganz bzw. weiß ich nicht wie ich das komplette File mit einem Schlag lesen kann.

:freak: :(


Es ist so, dass das File welches ich einlesen will einen Tag hat namens <Meta> und danach kommt der dazu gehörige <Text>. Also ich suche nach der Zahl und will den Text zurück haben, die beide in einem <item> sind.
Und das passiert dann X mal. (~1-1000 und mehr)

€dit: So ich habe nun gelesen, dass "XmlDocument" nach dem lesen der XML Datei diese in den Speicher läd. Dies würde schon mal einige meiner Probleme beheben.
 
Zuletzt bearbeitet:
Zurück
Oben