Benutzer mit den meisten Antworten
Read Custom xml Configuration file

Frage
-
Hallo zusammen,
für meinen Windows Dienst welcher in c# programmiert wurde, würde ich gerne ein Configurationsfile einlesen.
Das xml file wurde schon per Hand erstellt, hier das File
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- Configuration section-handler declaration area. --> <configSections> <sectionGroup name="Monitor"> <section name="Test" type="Samples.AspNet.PageAppearanceSection"/> <section name="Storage" type="Samples.AspNet.PageAppearanceSection"/> <section name="Virtual-Infrastructure" type="Samples.AspNet.PageAppearanceSection"/> <section name="Other-Server" type="Samples.AspNet.PageAppearanceSection"/> <section name="RZ" type="Samples.AspNet.PageAppearanceSection"/> </sectionGroup> <!-- Other <section> and <sectionGroup> elements. --> </configSections> <!-- Configuration section settings area. --> <Monitor> <Test> <quantity count="2" /> <m1 name="" /> <m2 name="" /> </Test> <Storage> <quantity count="2" /> <storage1 name="" user="" password="" /> <storage2 name="" user="" password="" /> </Storage> <Virtual-Infrastructure> <quantity count="4" /> <management name="" user="" password="" /> <host1 name="" user="" password="" /> <host2 name="" user="" password="" /> <host3 name="" user="" password="" /> <host4 name="" user="" password="" /> </Virtual-Infrastructure> </Monitor> </configuration>
Wie kann ich das xml file einlesen und zu Objekten verarbeiten ?
Antworten
-
OK, hier ist mal ein Ausschnitt aus einem meienr Programme:
if (io.File.Exists(configFile)) //Existiert die Datei? { //Ja XmlDocument doc = new XmlDocument(); //Dokument erzeugen doc.Load(configFile); //Datei laden if (doc.HasChildNodes && doc.FirstChild.Name == "Koopakiller") //Ist das erste Element "Koopakiller"? { //Ja foreach (XmlNode n in doc.FirstChild.ChildNodes) //Alle Kinderknoten durchgehen { if (n.Name == "BinHour") //Ist der Kindknoten "BinHour"? { foreach (XmlNode node in n.ChildNodes) //Alle Kindknorten von Binhour durchgehen { if (node.Name == "Setting") //Handelt es sich bei dem Kindknoten um den Typ "Setting"? {//Ja switch (node.Attributes["Property"].InnerText)//Eigenschaftswert von "Property" vegleichen { case "TopMost": //Wert ist "TopMost" checkBoxTopMost.IsChecked = bool.Parse(node.Attributes["Value"].InnerText); //Den Wert von der Eigenschaft "Value" auslesen und in ein bool Parsen. break;
//...Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort vorgeschlagen Ionut DumaModerator Freitag, 12. Oktober 2012 09:47
- Als Antwort markiert Ionut DumaModerator Mittwoch, 31. Oktober 2012 13:42
-
Hallo,
eine Applikations-Konfigurationsdatei kannst Du über OpenMappedExecConfiguration öffnen.
Mehr siehe http://stackoverflow.com/questions/3912727/openmappedexeconfiguration-vs-openexeconfigurationNur als Xml-Datei wie vorgeschlagen gehen Dir die zusätzlichen Möglichkeiten, wie das Auswerten der ConfigSections verloren. (Im übrigen ist das Schema nicht gerade günstig gewählt, anstatt z. B. host[1-4] wäre eine Auflistung über eine ConfigurationElementCollection günstiger).
Gruß Elmar
- Als Antwort vorgeschlagen Ionut DumaModerator Freitag, 12. Oktober 2012 09:48
- Als Antwort markiert Ionut DumaModerator Mittwoch, 31. Oktober 2012 13:42
Alle Antworten
-
Hallo, am besten du nimmst die Klassen aus dem System.Xml-Namespace. Da gibt es Klassen für das Dokument, die Knoten sowie die Attribute. Du könntest beispielsweise die Settingsfile laden und dfann mit foreach alle Child-Elemente durchgehen. Anschließend überprüfst du den Namen des Knotens in einer switch-Abfrage. Wenn es dann z.B. "Test" ist, Soe ließt du alle Kindelemente davon ein und suchst nach m1, m2 und quantity.
Koopakiller - http://koopakiller.ko.ohost.de/
-
OK, hier ist mal ein Ausschnitt aus einem meienr Programme:
if (io.File.Exists(configFile)) //Existiert die Datei? { //Ja XmlDocument doc = new XmlDocument(); //Dokument erzeugen doc.Load(configFile); //Datei laden if (doc.HasChildNodes && doc.FirstChild.Name == "Koopakiller") //Ist das erste Element "Koopakiller"? { //Ja foreach (XmlNode n in doc.FirstChild.ChildNodes) //Alle Kinderknoten durchgehen { if (n.Name == "BinHour") //Ist der Kindknoten "BinHour"? { foreach (XmlNode node in n.ChildNodes) //Alle Kindknorten von Binhour durchgehen { if (node.Name == "Setting") //Handelt es sich bei dem Kindknoten um den Typ "Setting"? {//Ja switch (node.Attributes["Property"].InnerText)//Eigenschaftswert von "Property" vegleichen { case "TopMost": //Wert ist "TopMost" checkBoxTopMost.IsChecked = bool.Parse(node.Attributes["Value"].InnerText); //Den Wert von der Eigenschaft "Value" auslesen und in ein bool Parsen. break;
//...Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort vorgeschlagen Ionut DumaModerator Freitag, 12. Oktober 2012 09:47
- Als Antwort markiert Ionut DumaModerator Mittwoch, 31. Oktober 2012 13:42
-
Hallo,
eine Applikations-Konfigurationsdatei kannst Du über OpenMappedExecConfiguration öffnen.
Mehr siehe http://stackoverflow.com/questions/3912727/openmappedexeconfiguration-vs-openexeconfigurationNur als Xml-Datei wie vorgeschlagen gehen Dir die zusätzlichen Möglichkeiten, wie das Auswerten der ConfigSections verloren. (Im übrigen ist das Schema nicht gerade günstig gewählt, anstatt z. B. host[1-4] wäre eine Auflistung über eine ConfigurationElementCollection günstiger).
Gruß Elmar
- Als Antwort vorgeschlagen Ionut DumaModerator Freitag, 12. Oktober 2012 09:48
- Als Antwort markiert Ionut DumaModerator Mittwoch, 31. Oktober 2012 13:42
-
Hallo toO231,
Wir gehen davon aus, dass die Antworten Dir weitergeholfen hat.
Wenn ja, wäre es hilfreich wenn Du diese Lösung bestätigen würdest, sodass andere Leute von derselben Situation profitieren können.
Wenn nein, neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.Danke und viele Grüße,
Ionut