2011-03-12 6 views
1

Je mon code LINQ formaté comme:Comment ajouter un autre nœud de niveau supérieur

<Deck> 
    <Treasure> 
    <card> 
    ..... 
    </card> 
    ...... 
    </treasure> 
    <Door> 
    <card> 
    ..... 
    </card> 
    ...... 
    </Door> 

Dans le code suivant comment puis-je ajouter une autre porte qui est le même « niveau » comme trésor? Tout ce que j'ai essayé continue de l'ajouter au même niveau que la carte. Voici ce que j'ai:

public void SaveXml(string path) 
    { 
     XElement xml; 
     XElement root = new XElement("Treasure"); 
     foreach (var item in TreasureCards) 
     { 
      xml = new XElement("Card", 
        new XAttribute("name", item.Name), 
        new XElement("Type", item.Type), 
        new XElement("Image", 
        new XAttribute("path", item.Image)), 
        new XElement("Usage", item.Usage), 
        new XElement("Quantity", item.Quantity), 
        new XElement("Sell", item.Sell) 
        ); 
      root.Add(xml); 
     } 
     root.Add(new XElement("Door")); 
     foreach (var item in DoorCards) 
     { 
      xml = new XElement("Card", 
        new XAttribute("name", item.Name), 
        new XElement("Type", item.Type), 
        new XElement("Image", 
        new XAttribute("path", item.Image)), 
        new XElement("Usage", item.Usage), 
        new XElement("Quantity", item.Quantity)); 
      root.Add(xml); 
     } 
+0

Votre 'root' est l'élément' Treasure'. Donc 'root.Add' va ajouter l'élément en tant qu'enfant de' Treasure'. Vous avez besoin de 'root' pour être l'élément' Deck'. –

Répondre

1

Vous devez créer l'élément de plate-forme première:

XElement deck = new XElement("Deck"); 

Alors COMBINEZ le trésor (que j'ai pris la liberté de changement de nom de la racine au trésor) et la porte:

XElement treasure = new XElement("Treasure") 
... 
deck.Add(treasure) 
... 
XElement door = new XElement("Door") 
... 
deck.Add(door) 
+0

Merci Rob! J'ai réussi à le faire fonctionner. :) – Stacey

Questions connexes