2008-12-11 5 views
4

Je dispose d'un fichier XML commelecture/écriture/XML

<?xml version="1.0" encoding="utf-8" ?> 

    <Configurations> 

      <EmailConfiguration> 
       <userName>xxxx</userName> 
       <password>xxx</password> 
       <displayName>xxxxx</displayName> 
       <hostAddress>xxxx</hostAddress> 
       <sslEnable>xxx</sslEnable> 
       <port>xxx</port> 
      </EmailConfiguration> 

      <LogConfiguration> 
       <logEnable>true</logEnable> 
       <generalEnable>true</generalEnable> 
       <warningEnable>true</warningEnable> 
       <errorEnable>true</errorEnable> 
      </LogConfiguration> 

     </Configurations> 

et je l'utilise comme fichier de configuration pour mon code et je veux récupérer leurs valeurs (innerText) comme

bool logEnable = value comes from XML (logEnable) 
bool warningEnable = value comes from XML (warningEnable) 
bool errorEnable = value comes from XML (errorEnable) 
bool generalEnable = value comes from XML (generalEnable) 

Alors, comment puis-je lire leurs valeurs pour les assigner aux variables booléennes et si je voulais changer l'une de leurs valeurs avec false, comment serais-je capable de faire cela?

... Merci

Cordialement ...

P.s: Si vous avez écrit des codes plus explicatifs, il serait tellement apprécié.

Merci encore ...

Répondre

5
public class Options 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; } 
    public string DisplayName { get; set; } 
    public string HostAddress { get; set; } 
    public bool SSL { get; set; } 
    public string Port { get; set; } 

    public bool LogEnable { get; set; } 
    public bool GeneralEnable { get; set; } 
    public bool WarningEnable { get; set; } 
    public bool ErrorEnable { get; set; } 

    public static Options Load(string path) 
    { 
     Options options = new Options(); 
     XmlDocument xml = new XmlDocument(); 
     xml.Load(path); 

     XmlNodeReader input = new XmlNodeReader(xml); 

     while (input.Read()) 
     { 
      var elementname = input.Name.ToLower(); 

      switch (elementname) 
      { 
       case "username": 
        options.UserName = input.Value; 
        break; 
       // all other cases 
       case "logenable": 
        options.LogEnable = Boolean.Parse(input.Value); 
        break; 
       // continue with other cases 
      } 
     } 
    } 

    public static void Save(Options options, string path) 
    { 
     XmlTextWriter writer = new XmlTextWriter(path); 

     xmlWriter.WriteStartDocument(true); 
     xmlWriter.WriteStartElement("configuration"); 
     xmlWriter.WriteStartElement("emailConfiguration"); 

     xmlWriter.WriteStartElement("userName"); 
     xmlWriter.WriteString(options.UserName); 
     xmlWriter.WriteEndElemement(); 

     // continue for all elements 

     xmlWriter.WriteEndElement(); 
     xmlWriter.WriteStartElement("logConfiguration"); 

     xmlWriter.WriteStartElement("logEnable"); 
     xmlWriter.WriteString(options.LogEnable.ToString()); 
     xmlWriter.WriteEndElemement(); 

     // continue for all elements 

     xmlWriter.WriteEndElement(); 
     xmlWriter.WriteEndElement(); 

     xmlWriter.Close(); 
    } 
} 

Je reste un peu de travail pour vous de compléter;) De plus, je n'ai pas écrit cela est Visual Studio, et je ne compile pas avant la main. Ce code est fourni tel quel sans garantie ou garantie. ;)

Il s'agit d'un processus de lecture/écriture XML de base dans .NET, bien qu'il existe de nombreuses options. Vous pouvez utiliser des requêtes XPath, ou si vous utilisez .NET 3.5, vous pouvez utiliser Linq to Sql, ce qui vous donnera une crédibilité auprès des enfants cool. Mais l'exemple ci-dessus devrait vous aider à démarrer rapidement, mais promettez que vous allez faire des recherches sur ces autres choses aussi, vous serez d'autant mieux pour cela.

+0

Merci, je vais faire des recherches en ce moment :) Merci de nous aider. – Tarik

1

La meilleure pratique consiste à utiliser réellement le fichier web.config ou le fichier app.config. Cela rend également ce processus beaucoup plus facile.

+0

Oui, il pourrait gaspiller ses appSettings avec ces valeurs, c'est vrai que c'est plus facile. Créer une section de configuration personnalisée n'est pas plus facile. Mais sa question fondamentale était sur la lecture et l'écriture de fichiers XML. Il ne devrait pas utiliser des fichiers XML. Et lire et écrire du XML est une bonne chose à comprendre. – NerdFury

+0

Peut-être mais quand je change n'importe quelle valeur d'entre eux, ils ont dit que j'avais besoin de redémarrer l'application, donc cela devrait être un problème plus tard. – Tarik

+0

Si vous modifiez les paramètres pendant que l'application est en cours d'exécution tout ce que vous avez à faire est d'actualiser le app.config. si je me souviens c'est quelque chose comme refreshsection.applicationsettings je viens d'utiliser cette technigue dans une application de création de lecteur vidéo – Ironsides

0

J'ai trouvé quelque chose comme ça et cela m'a satisfait réellement comment je veux :) Mais je veux apprendre que c'est un moyen efficace pour récupérer des données à partir de XML? Voici le tho code:

XmlDocument doc = new XmlDocument(); 

      doc.Load(HttpContext.Current.Server.MapPath("config.xml")); 

      logEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["logEnable"].InnerText); 
      warningEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["warningEnable"].InnerText); 
      errorEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["errorEnable"].InnerText); 
      generalEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["generalEnable"].InnerText);