Laden...

Xml erstellen

Erstellt von v.wochnik vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.577 Views
V
v.wochnik Themenstarter:in
280 Beiträge seit 2007
vor 16 Jahren
Xml erstellen

verwendetes Datenbanksystem: XML

Hallo Leute!

ich möchte ein XML-Dokument erstellen:
new XmlDocument()

Dann einige Elenente hinzufügen, und fertig!

XmlDoc.Save();

Jedoch fehlt der Header, also sowas wie <xml version="1.0" encoding="utf-8"> fehlt.

Wie kann ich das hinzufügen?

Danke.

Q
204 Beiträge seit 2005
vor 16 Jahren
Xml

Warum nimmst du nicht einfach ein DataSet
DataSet.SaveXml();-LoadXml()

Das ist am einfachsten

V
v.wochnik Themenstarter:in
280 Beiträge seit 2007
vor 16 Jahren

DataSet???

Ich muss Werte laden/speichern/neu erstellen

Heisßt:

SourceDirectory (string)
DestDirectory (string)
CopyFiles (bool)
AutoStart (bool)

So, und das kann ich in einem DataSet machen?

interessand.

gibt es dazu tuts?

Danke.

369 Beiträge seit 2006
vor 16 Jahren

Wenn du die XML-Datei partout händisch erzeugen willst, findest du hier ein Beispiel zum erzeugen des Headers.

/Nachtrag:

Die Dokumentation der DataSet-Klasse ist sehr gut und umfasst Beispiele. Auch den Abschnitt "Siehe auch" beachten.

V
v.wochnik Themenstarter:in
280 Beiträge seit 2007
vor 16 Jahren

ich will sie nicht manuell erzeugen - das ist mir egal

Fakt ist: gegeben seien ein paar werte und zwei arrays.

die werte sollen in einen Knoten <settings></settings> und die Arrays sollen in unterknoten
<array1><value></value>...</array1>
<array2><value></value>...</array2>

Wie soll ich das am besten machen?

Ich will die dinger laden können, wenn die datei nicht existiert - standardwerte und dann erstellen.

Wie soll ich das machen??

Danke.

N
4.644 Beiträge seit 2004
vor 16 Jahren

Original von v.wochnik
Wie soll ich das machen??

Mit den Klassen aus dem XML Namespace.

V
v.wochnik Themenstarter:in
280 Beiträge seit 2007
vor 16 Jahren

also mit xml, nicht mit dataset.
ok, gebongt.

aber wofür braucht man dataset?

Danke.

N
4.644 Beiträge seit 2004
vor 16 Jahren

Mit einem DataSet kannst Du Daten offline in Deiner Anwendung halten. Ist für Datenbanken gedacht.

V
v.wochnik Themenstarter:in
280 Beiträge seit 2007
vor 16 Jahren

sry f dp.

Ich habe noch eine Frage:

Wenn ein Wert, beispielsweise SourceDirectory == "" ist, sieht das so aus:


<SourceDirectory>
</SourceDirectory>

Wenn er nicht == "" ist, sieht das so aus:


<SourceDirectory>C:\</SourceDirectory>

Ich möchte aber, wenn SourceDirectory == "" ist, soll das so aussehen:


<SourceDirectory></SourceDirectory>

Wie realisiere ich das? Flags / Enums???

Danke.

// Edit:

Er schreibt auch keine Decleration in die XML-Datei.

Ach irgendwie passt das vorn und hinten nicht.
Wäre jemand so nett, und würde sich erbahmen, mir zu helfen?

Das hier habe ich schon:


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Data;

namespace ShareWatcher
{
    class Settings
    {
        //public static Settings Default = new Settings();

        public string SourceDirectory = String.Empty;
        public string DestDirectory = String.Empty;
        public bool CopyFiles = false;
        public bool IncludeSubDirectories = false;
        public bool OverwriteFiles = true;
        public bool AutoStart = false;
        public bool LogFiles = true;
        public bool StartMinimized = false;
        public bool FilterActivated = false;
        public bool FilterMethod = false;
        public string[] FilterEntries = { };
        public bool CleanActivated = false;
        public string[] CleanSearchEntries = { };
        public string[] CleanReplaceEntries = { };

        private string FileName;

        public Settings()
        {
            FileName = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\";
            FileName += "ShareWatcher" + Path.DirectorySeparatorChar + "config.xml";


            if (File.Exists(FileName))
                Load();
            else
                Save();
        }

        ~Settings()
        {
            Save();
        }

        public void Load()
        {
            if (!File.Exists(FileName))
                return;

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(FileName);

            SourceDirectory = xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/SourceDirectory").Value.Trim();
            DestDirectory = xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/DestDirectory").Value.Trim();

            if (xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/CopyFiles").Value.Trim() == "true")
                CopyFiles = true;
            else
                CopyFiles = false;

            if (xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/IncludeSubDirectories").Value.Trim() == "true")
                IncludeSubDirectories = true;
            else
                IncludeSubDirectories = false;

            if (xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/OverwriteFiles").Value.Trim() == "true")
                OverwriteFiles = true;
            else
                OverwriteFiles = false;

            if (xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/AutoStart").Value.Trim() == "true")
                AutoStart = true;
            else
                AutoStart = false;

            if (xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/LogFiles").Value.Trim() == "true")
                LogFiles = true;
            else
                LogFiles = false;

            if (xmlDoc.DocumentElement.SelectSingleNode("./MainSettings/StartMinimized").Value.Trim() == "true")
                StartMinimized = true;
            else
                StartMinimized = false;

            if (xmlDoc.DocumentElement.SelectSingleNode("./Filter/Activated").Value.Trim() == "true")
                FilterActivated = true;
            else
                FilterActivated = false;

            if (xmlDoc.DocumentElement.SelectSingleNode("./Filter/Method").Value.Trim() == "true")
                FilterMethod = true;
            else
                FilterMethod = false;

            XmlNode xmlFilterItems = xmlDoc.SelectSingleNode("./Filter/Items");
            foreach (XmlNode xmlFilterItem in xmlFilterItems.ChildNodes)
            {
                FilterEntries += xmlFilterItem.Value.Trim();
            }
        }

        public void Save()
        {
            if (!Directory.Exists(Path.GetDirectoryName(FileName)))
                Directory.CreateDirectory(Path.GetDirectoryName(FileName));

            if (File.Exists(FileName))
                File.Delete(FileName);

            XmlDocument xmlDoc = new XmlDocument();

            XmlElement xmlMain = xmlDoc.CreateElement("ConfigData");

            // Main settings
            XmlElement xmlSettings = xmlDoc.CreateElement("MainSettings");

            XmlElement xmlSource = xmlDoc.CreateElement("SourceDirectory");
            xmlSource.AppendChild(xmlDoc.CreateTextNode(SourceDirectory));
            xmlSettings.AppendChild(xmlSource);

            XmlElement xmlDest = xmlDoc.CreateElement("DestDirectory");
            xmlDest.AppendChild(xmlDoc.CreateTextNode(DestDirectory));
            xmlSettings.AppendChild(xmlDest);

            XmlElement xmlCopy = xmlDoc.CreateElement("CopyFiles");
            xmlCopy.AppendChild(xmlDoc.CreateTextNode(CopyFiles.ToString()));
            xmlSettings.AppendChild(xmlCopy);

            XmlElement xmlSub = xmlDoc.CreateElement("IncludeSubDirectories");
            xmlSub.AppendChild(xmlDoc.CreateTextNode(IncludeSubDirectories.ToString()));
            xmlSettings.AppendChild(xmlSub);

            XmlElement xmlOverwrite = xmlDoc.CreateElement("OverwriteFiles");
            xmlOverwrite.AppendChild(xmlDoc.CreateTextNode(OverwriteFiles.ToString()));
            xmlSettings.AppendChild(xmlOverwrite);

            XmlElement xmlAuto = xmlDoc.CreateElement("AutoStart");
            xmlAuto.AppendChild(xmlDoc.CreateTextNode(AutoStart.ToString()));
            xmlSettings.AppendChild(xmlAuto);

            XmlElement xmlLog = xmlDoc.CreateElement("LogFiles");
            xmlLog.AppendChild(xmlDoc.CreateTextNode(LogFiles.ToString()));
            xmlSettings.AppendChild(xmlLog);

            XmlElement xmlMin = xmlDoc.CreateElement("StartMinimized");
            xmlMin.AppendChild(xmlDoc.CreateTextNode(StartMinimized.ToString()));
            xmlSettings.AppendChild(xmlMin);

            xmlMain.AppendChild(xmlSettings);

            XmlElement xmlFilter = xmlDoc.CreateElement("FilterData");

            XmlElement xmlFilterActivated = xmlDoc.CreateElement("Activated");
            xmlFilterActivated.AppendChild(xmlDoc.CreateTextNode(FilterActivated.ToString()));
            xmlFilter.AppendChild(xmlFilterActivated);

            XmlElement xmlFilterMethod = xmlDoc.CreateElement("Method");
            xmlFilterMethod.AppendChild(xmlDoc.CreateTextNode(FilterMethod.ToString()));
            xmlFilter.AppendChild(xmlFilterMethod);

            XmlElement xmlFIlterItems = xmlDoc.CreateElement("ItemData");
            foreach (string filterItem in FilterEntries)
            {
                XmlElement xmlFilterItem = xmlDoc.CreateElement("Item");
                xmlFilterItem.AppendChild(xmlDoc.CreateTextNode(filterItem));
                xmlFIlterItems.AppendChild(xmlFilterItem);
            }
            xmlFilter.AppendChild(xmlFIlterItems);

            xmlMain.AppendChild(xmlFilter);

            XmlElement xmlClean = xmlDoc.CreateElement("CleanData");

            XmlElement xmlCleanActivated = xmlDoc.CreateElement("Activated");
            xmlCleanActivated.AppendChild(xmlDoc.CreateTextNode(CleanActivated.ToString()));
            xmlClean.AppendChild(xmlCleanActivated);
            
            XmlElement xmlCleanItems = xmlDoc.CreateElement("ItemData");
            for (int i = 0; i < CleanSearchEntries.Length; i++)
            {
                XmlElement xmlCleanItem = xmlDoc.CreateElement("Item");

                XmlElement xmlCleanItemSearch = xmlDoc.CreateElement("Search");
                xmlCleanItemSearch.AppendChild(xmlDoc.CreateTextNode(CleanSearchEntries[i]));
                xmlCleanItem.AppendChild(xmlCleanItemSearch);

                XmlElement xmlCleanItemReplace = xmlDoc.CreateElement("Replace");
                xmlCleanItemReplace.AppendChild(xmlDoc.CreateTextNode(CleanReplaceEntries[i]));
                xmlCleanItem.AppendChild(xmlCleanItemReplace);

                xmlCleanItems.AppendChild(xmlCleanItem);
            }
            xmlClean.AppendChild(xmlCleanItems);

            xmlMain.AppendChild(xmlClean);

            xmlDoc.AppendChild(xmlMain);

            xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            xmlDoc.Save(FileName);
        }
    }
}

Danke schonmal, für eure Hilfe.