neomatic
Goto Top

CSharp Variablen aus XML Datei einlesen

Ich möchte aus einer XML Datei Werte auslesen und in Variablen übergeben

Hallo,

eins vorweg ich programmiere erst seit kurzen mit C# und habe daher noch nicht viel erfahrung. Daher bitte ich etwas um Nachsicht wenn ich etwas nicht direkt verstehe oder mein Code etwas durcheinander ist.


Aber zum eigentlichen:

Ich möchte Werte aus einer XML Datei einlesen und an Variablen übergeben. Ich habe bereits etwas experimentiert und einen Code gebastelt. Die Fehlerliste zeigt 0 Fehler aber jedes mal wenn die Variablen aus der XML Datei gelesen werden soll, sagt er mit das der Wert nicht unter appSettings zu finden ist. Dabei steht er drin.

9075c57dedbc9a7f53d42b07e910d54a


Hier mal mein Code:

            AppSettingsReader config = new AppSettingsReader();

            string mailfrom = (string)config.GetValue("mailfrom", typeof(string));  
            string mailto = (string)config.GetValue("mailto", typeof(string));  
            string mailsubject = (string)config.GetValue("mailsubject", typeof(string));  
            string smtpsrv = (string)config.GetValue("smtpsrv", typeof(string));  
            int smtpport = (int)config.GetValue("smtpport", typeof(int));  
            string smtpuser = (string)config.GetValue("smtpuser", typeof(string));  
            string smtppasswd = (string)config.GetValue("smtppasswd", typeof(string));  
            bool secsmtp = (bool)config.GetValue("secsmtp", typeof(bool));  
        


Und hier die XML Datei die eingelesen werden soll:

<?xml version="1.0" encoding="utf-8"?>  
<configuration>
  <appSettings>
    <add key="mailfrom" value="0815@abc.de" />  
    <add key="mailto" value="0815@def.de" />  
    <add key="mailsubject" value="0815 Runde" />  
    <add key="smtpsrv" value="pop.def.de" />  
    <add key="smtpport" value="25" />  
    <add key="smtpuser" value="benutzer" />  
    <add key="smtppasswd" value="passwort" />  
    <add key="secsmtp" value="false" />  
  </appSettings>
</configuration>



Sieht jemand den Fehler?

Oder hättet ihr einen besseren weg?

Ich wäre für Hilfe wirklich dankbar.


Gruß

Neomatic


Edit1: doppelten mailto Eintrag geändert.

Content-Key: 160098

Url: https://administrator.de/contentid/160098

Printed on: April 16, 2024 at 08:04 o'clock

Member: perseues
perseues Feb 04, 2011 at 07:41:58 (UTC)
Goto Top
Hallo Neomatic,

nun, wenn das der Originalcode ist, hat der Compiler recht. Der Wert "mailfrom" ist nicht da. Du hast da zweimal "mailto" stehen.

Grüße perseues
Member: Neomatic
Neomatic Feb 04, 2011 at 08:04:58 (UTC)
Goto Top
Hallo perseues,

danke für den Hinweis. Hab es gestern einfach nicht mehr gesehen. face-smile War wohl zu spät.

Habs korrigiert, allerdings immernoch die selbe Fehlermeldung.


Gruß

Neomatic
Member: perseues
perseues Feb 04, 2011 at 15:18:36 (UTC)
Goto Top
versuch im Programm mal:

using System.Configuration;

und dann den Zugriff einfach per:

string mailfrom = System.Configuration.ConfigurationSettings.AppSettings["mailfrom"];  
...

so klappts bei mir zumindest.


Edit:

hier mal kurz mein Test mit Deiner App.config:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string args)
        {
            string mailto = System.Configuration.ConfigurationSettings.AppSettings["mailto"];  
            string mailfrom = System.Configuration.ConfigurationSettings.AppSettings["mailfrom"];  
            Console.WriteLine(mailto);
            Console.WriteLine(mailfrom);
        }
    }
}
Member: Neomatic
Neomatic Feb 04, 2011 at 23:10:29 (UTC)
Goto Top
Hallo,

soweit funktioniert der Code. Allerdings meckert er dann folgendes an:


Eine implizierte Konvertierung von "string" in "bool" ist nicht möglich

Die beste Übereinstimmung für die überladene System.Net.Mail.SmtpClient.SmtpClient(string, int)-Methode hat einige ungültige Argumente.

2-Argument: Kann nicht von "string" in "int" konvertiert werden.


All diese Fehler zeigen auf die Zeile:

SmtpClient client = new SmtpClient(smtpsrv, smtpport);


Dann hat er noch folgenden Fehler:

Eine implizite Konvertierung vom Typ "string" in "bool" ist nicht möglich.


in der Zeile :

client.EnableSsl = secsmtp;


Ich habe versucht die Variable "smtpport" mit "int" und "secsmtp" mit "bool" zu deklarieren, allerdings gibt es da noch mehr fehler.

Wie kann ich den Fehler beheben, bzw. was bedeuten diese Meldungen?

Gruß

Neomatic
Member: perseues
perseues Feb 05, 2011 at 09:24:14 (UTC)
Goto Top
O.K. App.settings gibt immer einen String zurück. (Wußte ich bisher auch nicht, da ich bisher nur Strings ausgelesen habe). Macht nichts. Du mußt jetzt den String nach Integer und Bool konvertieren. Dazu gibt es die Methoden .ToInt32 und .ToBoolean. Also für das Beispiel von mir:

            string smtpport = System.Configuration.ConfigurationSettings.AppSettings["smtpport"];  
            string secsmtp = System.Configuration.ConfigurationSettings.AppSettings["secsmtp"];  
            int intsmtpport = Convert.ToInt32(smtpport);
            Console.WriteLine(intsmtpport);
            bool boolsec = Convert.ToBoolean(secsmtp);
            Console.WriteLine(boolsec);

Grüße perseues
Member: Neomatic
Neomatic Feb 05, 2011 at 20:53:19 (UTC)
Goto Top
Hallo,

vielen Dank es funktioniert. face-smile

Ich musste erst noch

using System.Reflection;


hinzufügen damit es funktioniert. Er bringt zwar noch folgende Warnung:

"System.Configuration.ConfigurationSettings.AppSettings" ist veraltet: ""This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings""


Aber darum kümmere ich mich später. Erstmal soll das Programm lauffähig sein, dann kann optimiert werden. face-smile


Vielen Dank für deine Hilfe.

Gruß

Neomatic