2010-09-23 3 views
1

Je suis en train d'étudier la possibilité de stocker les paramètres dans un fichier XML. Voici une version simplifiée de mon code. Vous ne le voyez pas ici, mais ce code est situé à l'intérieur d'un bloc try afin que je puisse attraper n'importe quel XmlException qui apparaît.XML: lecture des enfants d'un élément

XmlReader fileReader = XmlReader.Create(Path.GetDirectoryName(Application.ExecutablePath) + "\\settings.xml"); 

// Start reading 
while (fileReader.Read()) 
{ 
    // Only concern yourself with start tags 
    if (fileReader.IsStartElement()) 
    { 
     switch (fileReader.Name) 
     { 
      // Calendar start tag detected 
      case "Calendar": 
       // 
       // 
       // Here's my question: can I access the children 
       // of this element here? 
       // 
       // 
       break; 
     } 
    } 
} 

// Close the XML reader 
fileReader.Close(); 

Puis-je accéder aux enfants d'un certain élément sur place dans le code où je mets le grand commentaire?

+1

Vous ne devriez vraiment pas enterrer la question dans le code. Et si vous devez, au moins le signaler. –

+3

Pourquoi ne pas utiliser ce qui est disponible - app.config et les paramètres de l'utilisateur ?? Pourquoi réinventer la roue ** encore une fois ** ?? –

+0

marc_s: Je préfère les paramètres utilisateur, mais pour autant que je sache, il n'a pas de moyen de sauvegarder les tableaux et les structures. En outre, l'enregistrement des paramètres au format XML permet de modifier facilement certains paramètres avant la mise en œuvre d'une boîte de dialogue de paramètres. – Pieter

Répondre

1

Il existe des applications où l'utilisation de XmlReader pour lire un document XML est la bonne réponse. Sauf si vous avez des centaines de milliers de paramètres utilisateur que vous voulez lire (vous n'avez pas) et vous n'avez pas besoin de les mettre à jour (vous le faites), XmlReader est le mauvais choix.

Puisque vous parlez de vouloir stocker des tableaux et des structures dans votre XML, il me semble évident que vous voulez utiliser les mécanismes de sérialisation intégrés de .NET. (Vous pouvez même utiliser XML comme format de sérialisation, si l'accès au XML est important pour vous.) Voir this page pour un point de départ. Si vous concevez vos classes de paramètres correctement (ce qui n'est pas difficile), vous pouvez les sérialiser et les désérialiser sans devoir écrire de code qui ne connaisse rien sur les noms et les types de données des propriétés que vous sérialiserez. Votre code qui accède aux paramètres sera complètement découplé des détails de mise en œuvre de la façon dont ils sont persistés, ce qui, comme dirait Martha Stewart, est une bonne chose.

+0

c'était ma pensée aussi. Si vous ne pouvez pas utiliser App.config, puis la sérialisation ou juste XPath droite ... –

+0

Je suis en train d'examiner la sérialisation en ce moment. Je vais avoir besoin de temps pour savoir si je peux ou non mettre en œuvre ceci. – Pieter

+0

J'ai essayé d'implémenter la sérialisation dans mon programme, mais j'ai une erreur d'exécution. Voici deux captures d'écran: http://bit.ly/br5c03 http: // bit.ly/8Zd2GC Que fais-je de mal? – Pieter

0

Vérifiez this article court pour une solution. En passant, vous devez utiliser LINQ to XML si vous voulez travailler facilement avec XML (overview).

0

Vous pouvez utiliser l'une des méthodes suivantes XmlReader:

  • ReadSubtree()
  • ReadInnerXml()
  • ReadOuterXml()
  • ReadStartElement()

lire le contenu de l'enfant. Lequel vous utilisez dépend exactement de ce que vous souhaitez faire avec ledit contenu enfant.

Questions connexes