12
votes

Lire des commentaires XML en C #

J'ai quelques fichiers XML contenant des commentaires au-dessus des nœuds. Lorsque je lis le fichier dans, dans le cadre du processus, je voudrais obtenir le commentaire aussi. Je sais que vous pouvez écrire un commentaire au fichier à l'aide de xmlcomment em>, mais je ne sais pas comment les lire.

Mon XML ressemble à ceci: P>

<Objects>
  <!--Comment about node-->
  <GUID-bf2401c0-ef5e-4d20-9d20-a2451a199362>
    <info job="SAVE" person="Joe" />    
    <info job="SAVE" person="Sally" />       
  </GUID-bf2401c0-ef5e-4d20-9d20-a2451a199362>
  <!--Another Comment about node-->
  <GUID-bf2401c0-ef5e-4d20-9d20-a5844113284112>
    <info job="SAVE" person="John" />    
    <info job="SAVE" person="Julie" />       
  </GUID-bf2401c0-ef5e-4d20-9d20-a5844113284112>


3 commentaires

Détail manquant important: Quel est le code que vous utilisez pour "lire le fichier dans"?


Bien .. comment allez-vous lire ceci


Vérifiez Cette réponse


6 Réponses :



17
votes

Essayez ceci:

XmlReader xmlRdr = XmlReader.Create("Test.XML");
// Parse the file
while (xmlRdr.Read())
{
    switch (xmlRdr.NodeType)
    {
        case XmlNodeType.Element:
            // You may need to capture the last element to provide a context
            // for any comments you come across... so copy xmlRdr.Name, etc.
            break;
        case XmlNodeType.Comment:
            // Do something with xmlRdr.value


4 commentaires

FAUX est la valeur par défaut pour Ignorecomments


@ V4Vend: Même dans cette réponse et en code réel, c'est une bonne idée de la définir explicitement.


A travaillé un régal, je n'ai jamais réalisé que les nœuds avaient des types comme ça.


Qu'est-ce que le commentaire est placé en dehors de l'élément racine, dans ce cas ? Pourrait-il être lu et analysé?



0
votes

J'ai enregistré votre XML dans un fichier, voici l'échantillon de code.

        XmlDocument document = new XmlDocument();
        document.Load("test.xml");
        foreach (XmlComment comment in document.SelectNodes("//comment()"))
        {
            Console.WriteLine("Comment: \"{0}\".", comment.Value);
        }


0 commentaires

14
votes

à l'aide de system.xml.linq: xxx


0 commentaires

0
votes

Certains échantillons de code sur la manière d'accéder aux commentaires espèrent que cela aide

using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(@"<Objects><!--Comment about node--><othernode/><!--Some more comment--></Objects>");

    XmlNode root = doc.FirstChild;
    if (root.HasChildNodes)
    {
      for (int i=0; i<root.ChildNodes.Count; i++)
      {
        if(     root.ChildNodes[i] is XmlComment)
            Console.WriteLine(root.ChildNodes[i].InnerText);
      }
    }
  }
}


0 commentaires

2
votes

Je sais que la question est très ancienne, mais hier, j'ai eu le même problème. Alors voici ma solution: xxx

peut-être que cela aide quelqu'un


0 commentaires