Laden...

Problem bei XML erstellen (geht weiter...)

Erstellt von donatello vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.375 Views
D
donatello Themenstarter:in
18 Beiträge seit 2006
vor 17 Jahren
Problem bei XML erstellen (geht weiter...)

neues Problem siehe unten...

hallo,
hab schon im Forum herumgestöbert, aber noch nichts passendes gefunden...
und zwar hab ich ein Problem beim Erstellen einer XML File, diese soll nach dem Schema

<?xml version="1.0" encoding="UTF-8"?>
<settings version="1.1">
    <entries>
        <pathentry>
            <alias>Lokal</alias>
            <path>C:\</path>
            <raid>None</raid>
        </pathentry>
    </entries>
</settings>

aufgebaut werden. wie man eine XML Datei schreibt bzw erstellt weiß ich ja... hierbei hab ich allerdings 2 Probleme:

  1. wie speichere ich beim Wurzelelement <settings> die Version 1.1 dazu?
    mein Wurzelknoten wird momentan mit
XmlNode root = xmlDoc.CreateElement("settings");

erstellt

  1. momentan weiß ich nur, wie man eine Datei nach dem Schema <i>settings\pathentry</i> erstellt. wie bringe ich die Ebene Entries da unter?

schreiben tu ich momentan so (allerdings fehlt hier jetzt die Ebene entries

XmlNode newNode = xmlDoc.CreateElement("pathentry");
XmlNode data = xmlDoc.CreateElement("alias");
data.Innertext = "...";
XmlNode newNode.AppendChild(data);
xmlDoc.DocumentElement.AppendChild(newNode);

ich hoffe ich hab das irgendwie verständlich rübergebracht was ich meine 🙂

schönen Tag,

mfg donatello

476 Beiträge seit 2004
vor 17 Jahren

hallo donatello,

zu 1)
in dem du ein XmlAttribut "version" erzeugst, in den value "1.1" schreibst und dem root-Knoten anfügst.

zu 2)
in dem du bevor du den Knoten "pathentry" erzeugst und ihn als child an den root-Knoten anhängst, einen Knoten "entries" erzeugst und eben diesen an den root-Knoten anhängst, darauf hin natürlich den "pathentry"-Knoten nicht mehr an den root-Knoten sondern an den "entries"-Knoten anhängen.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

D
donatello Themenstarter:in
18 Beiträge seit 2006
vor 17 Jahren

vielen Dank, hat funktioniert 🙂

D
donatello Themenstarter:in
18 Beiträge seit 2006
vor 17 Jahren

okay, jetzt hab ich ein anderes Problem: meine zweite XML Datei wird zu groß.
in dieser speichere ich ein Informationsabbild von Dateien ab, welche sich in ausgewählten Pfaden befinden (diese Pfade werden in der vorigen XML Datei abgespeichert).

ein Eintrag hat das folgende Schema:
Datum der Information
Pfad
Name
Typ
Computername
Raidname
Erstelldatum
Erstellzeit
Änderungsdatum
Änderungszeit
MD5 Hash

nun befinden sich aber in manchen Ordnern 100.000 oder mehr Dateien, und XMLDocument hat ja den Nachteil dass alles im Speicher behalten wird oder?

muss glaub schon so sein, denn bei 130.000 Dateien hab ich 500Mb RAM Auslastung?!? gibt's eine Möglichkeit, das XMLDocument hin und wieder zu schließen und neu zu öffnen?

Momentan sieht mein Ablauf so aus: Knopfdruck bereitet einerseits das XMLDocument vor, zweitens startet er den Scan, wobei die zu durchsuchenden Ordner in einer ArrayList stehen.
Ordner werden rekursiv durchsucht, jede Datei wird in das XMLDocument eingefügt.

ist nun ein Ordner fertig durchsucht worden, wird das XMLDocument mit xmlDoc.Save(new XmlTextWriter(Application.StartupPath + @"\filelist.xml", new UTF8Encoding(false))); gespeichert.

kann ich das XmlDocument nun schließen und neu öffnen bzw wie funktioniert das, dass ich etwas weniger Ram Auslastung habe?

mir fiel nämlich auf, dass bei größeren Datenmengen das Programm sich quasi beendet. obwohl die Queue noch nicht leer ist, stoppt das Programm (es bleibt zwar offen, allerdings sucht und sammelt es keine Informationen mehr?)

und ich gehe davon aus, dass dies mit der enormen RAM Auslastung zu tun hat...

schönen Tag noch,

mfg donatllo

L
25 Beiträge seit 2006
vor 17 Jahren

Dafür solltest XmlWriter benutzen

Aus der Hilfe:

Stellt einen Writer für die schnelle, vorwärts gerichtete Generierung von Streams oder Dateien mit XML-Daten ohne Zwischenspeicherung dar.

0x0D 0x0A