Question

J'ai une classe qui a les propriétés suivantes:

public class Author {
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

Ensuite, j'ai une liste des auteurs comme ceci:

List<Author> authors = new List<Author> ();

authors.add(
  new Author { 
    FirstName = "Steven",
    LastName = "King"
  });

authors.add(
  new Author { 
    FirstName = "Homer",
    LastName = ""
  });

Maintenant, je suis en train d'utiliser LINQ to XML afin de générer le code XML représentant ma liste d'auteurs.

new XElement("Authors",
  new XElement("Author", 
    from na in this.Authors
    select new XElement("First", na.First)))

Le bloc ci-dessus génère pas le XML comme je l'attends à. Ce que je reçois est:

<Authors>
  <Author>
    <First>Steven</First>
    <First>Homer</First>
  </Author>
<Authors>

Ce que je veux la sortie XML pour ressembler est:

<Authors>
  <Author>
    <First>Steven</First>
    <Last>King</Last>
  </Author>
  <Author>
    <First>Homer</First>
    <Last></Last>
  </Author>
</Authors>

Toute aide sur la façon d'obtenir le XML à regarder comme je l'ai besoin pour serait grandement appréciée!

Était-ce utile?

La solution

Vous devez passer la requête IEnumerable<XElement> comme second paramètre, pas la chaîne « Auteur », comme suit:

// Note the new way to initialize collections in C# 3.0.
List<Author> authors = new List<Author> ()
{
  new Author { FirstName = "Steven", LastName = "King" }),
  new Author { FirstName = "Homer", LastName = "" })
};

// The XML
XElement xml = new XElement("Authors",
    from na in this.Authors
    select new XElement("Author",
        new XElement("First", na.FirstName),
        new XElement("Last", na.LastName)));

Cela vous donnera le résultat que vous avez besoin.

Autres conseils

Je sais que vous utilisez C #, mais c'est un moment où vous devriez sérieusement envisager l'ajout d'un projet VB.NET à votre solution. Littéraux XML sont parfaits pour cela et le rendre beaucoup plus facile.

Pour obtenir le code XML de votre liste Auteur, vous feriez ceci:

Function GetAuthorsXML(authors As List(Of Author)) As XElement
    Return <Authors>
               <%= from a in authors _
                   select <Author>
                              <First><%= a.FirstName %></First>
                              <Last><%= a.LastName %></Last>
                          </Author> %>
           </Authors>
End Function
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top