2012-11-02 3 views
-1

j'ai le code XML suivantInsertion d'éléments dans un nœud enfant, basé sur une condition

XElement xe = 
    new XElement("Schedule", 
     new XElement("Team", 
     new XElement("Name", "SomeName"), 
     new XElement("Dates"), 
      new XElement("Game", 
       new XElement("Bench"), 
       new XElement("Date") 
      ) 
    ) 
); 

Finalement, je vais à ajouter au champ de la magistrature et la date.

J'ai essayé quelque chose comme:

foreach(Name name in names) 
{ 
    doc.Element("Schedule").Element("Team").Element("Dates") 
     .Elements() 
     .FirstOrDefault(item => (string)item.Parent.Element("Name") == name.TeamName) 
     .Add(
      new XElement("Game", 
      new XElement("Bench", "SomeBench"), 
      new XElement("Date", SomeDate.ToShortDateString()) 
      ) 
     ); 
} 

je reçois un objet non définie à une instance d'une erreur d'objet.

Toute aide serait grande

EDIT: J'ai oublié de mentionner que les insertions se passerait-il avec une boucle

Mon résultat final finirait par quelque chose comme:

<Schedule> 
    <Team> 
     <Name>SomeName</Name> 
     <Dates> 
     <Bench>SomeBench</Bench> 
     <Date>12/10/2012</Date> 
     </Dates> 
    </Team> 
    <Team> 
     <Name>SomeName2</Name> 
     <Dates> 
     <Bench>SomeBench2</Bench> 
     <Date>12/13/2012</Date> 
     </Dates> 
    </Team> 
    <Team> 
     <Name>SomeName3</Name> 
     <Dates> 
     <Bench>SomeBench3</Bench> 
     <Date>12/16/2012</Date> 
     </Dates> 
    </Team> 
</Schedule> 

Répondre

1

code de l'OP d'origine pourrait avoir une exception pour plusieurs raisons:

  1. Dans doc.Element("Schedule").Element("Team").Element("Dates") le le segment Element("Schedule") est supplémentaire, si doc == xe, c'est-à-dire Schedule est l'élément xml racine.
  2. .Elements() Le segment est en plus car l'élément Dates dans xe ne contient aucun élément enfant.

La question est très confuse pour moi. Néanmoins, je vais essayer de spéculer.

foreach (var dates in doc.Elements("Team") 
         .Where(t => names.Any(n => n.TeamName == t.Element("Name").Value)) 
         .Select(t => t.Element("Dates"))) 
{ 
    dates.Add(
      new XElement("Bench", "SomeBench"), 
      new XElement("Date", SomeDate.ToShortDateString()) 
     ); 
} 
+0

Merci pour votre réponse. Vous êtes plus proche que je n'ai jamais eu ... mais le problème est que ce n'est que le premier ... du fichier. Je besoin cycle de trop à travers les 5 entrées et ajouter un pour chaque –

+0

Ajouté résultat attendu –

+0

@AdamSweeney réviser ma modifier – horgh

Questions connexes