0 votes

Comment puis-je créer une telle hiearcie xml ?

J'ai essayé les classes LinqToXml et les classes XML mais je n'y suis toujours pas parvenu. Je veux créer une telle hiérarchie dans une boucle dynamiquement.

Créer le nœud racine

<Root></Root>

Alors ajoutez-y un enfant.

<Root>
 <Biggest></Biggest>
</Root>

Puis ajouter un enfant pour le dernier noeud ajouté

<Root>
   <Biggest>
      <Bigger>
      </Bigger>
   </Biggest>
</Root>

Puis retournez ajouter un autre

<Root>
   <Biggest>
      <Bigger>
      </Bigger>
      <Another>
      </Another>
  </Biggest>
</Root>

Edit : je veux donner un exemple.

  XElement root = new XElement("root");
    XElement first = new XElement("first", "value");
    XElement second = new XElement("second", "Value");

    root.Add(first);
    //now how can add second node into first ??
    //I don't want to add second one into first then add it into root.

4voto

Jaroslav Jandek Points 5500

Vous pouvez créer directement une structure xml :

XElement root = new XElement("root",
    new XElement("first", "value",
        new XElement("second", "Value")));

Traverser les nœuds en utilisant diverses méthodes comme Element :

root.Element("first").Element("second").Add(new XElement("third", "Value"));
//or
root.Descendants("second").First().Add(new XElement("underTheThird", "Value"));

Ajoutez à n'importe quel élément :

root.Add(new XElement("underTheSecond", 456));

etc.

Microsoft met à disposition plusieurs documents à lire - comme le Référence (LINQ to XML) .

Modifier - a recueilli les informations que j'ai postées dans les commentaires :

Vous pouvez faire root.Add(first); d'abord et ensuite faire first.Add(second); . L'ordre dans lequel vous le faites n'a pas d'importance. Le document Xml n'est pas construit comme une chaîne de caractères, c'est une hiérarchie d'objets - vous pouvez ajouter de nouveaux nœuds n'importe où dans l'arbre.

Add utilise un objet comme paramètre (comme le constructeur de l'élément). Vous pouvez ajouter n'importe quel XObject (qu'il est possible d'ajouter) et tout autre objet convertible en une XText (chaînes de caractères, chiffres, ... - en utilisant principalement XmlConvert ).

Sang-froid : Je pense que la classe XmlLinkedNode fournit ce dont j'ai besoin. :
Vous pouvez utiliser soit le NextNode ou le PreviousNode pour obtenir les frères et sœurs et la Parent pour obtenir le parent du nœud actuel.

Bien que toutes ces informations soient accessibles via le lien que j'ai posté dans ma réponse.

2voto

Chris Taylor Points 25865

Si je comprends bien, vous voulez créer des éléments XML, puis revenir et ajouter des éléments enfants supplémentaires. Vous pourriez envisager d'utiliser la fonction XmLDocument pour cela.

En utilisant XElement, vous pouvez également le faire comme suit

  XElement root = new XElement("Root");
  XElement biggest = new XElement("Biggest");
  XElement bigger = new XElement("Bigger");
  XElement another = new XElement("Another");

  root.Add(biggest);
  biggest.Add(bigger);
  biggest.Add(another);

Ici, chaque étape ajoute à la hiérarchie, mais à chaque étape intermédiaire, la hiérarchie est un XML valide.

Mise à jour : D'après la question posée dans le commentaire, je pense que c'est ce que vous recherchez.

  root.Add(biggest);
  root.Element("Biggest").Add(bigger);      
  root.Element("Biggest").Add(another);

0voto

ThaKidd Points 553

Je ne sais pas si cela peut vous aider, mais j'ai trouvé ce site très utile pour travailler avec des fichiers xml.

http://www.codeproject.com/KB/XML/XML_Configuration_File.aspx

Si vous l'utilisez, assurez-vous d'envelopper toutes les instances en utilisant je l'ai appris à mes dépens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X