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.
Warum nimmst du nicht einfach ein DataSet
DataSet.SaveXml();-LoadXml()
Das ist am einfachsten
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.
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.
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.
Original von v.wochnik
Wie soll ich das machen??
Mit den Klassen aus dem XML Namespace.
also mit xml, nicht mit dataset.
ok, gebongt.
aber wofür braucht man dataset?
Danke.
Mit einem DataSet kannst Du Daten offline in Deiner Anwendung halten. Ist für Datenbanken gedacht.
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.