Frage

Ich habe eine Klasse, die die folgenden Eigenschaften hat:

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

Als nächstes habe ich eine Liste der Autoren wie folgt:

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

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

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

Nun, ich versuche, Linq to XML zu verwenden, um die XML repräsentiert meine Autoren Liste zu erzeugen.

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

Der Block oben erzeugt nicht die XML, wie ich es erwarte. Was ich erhalte, ist:

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

Was ich die XML-Ausgabe aussehen wollen wie ist:

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

Jede Hilfe, wie die XML zu bekommen aussehen wie ich es brauche immens geschätzt werden würde!

War es hilfreich?

Lösung

Sie müssen die IEnumerable<XElement> Abfrage als zweiten Parameter zu übergeben, nicht der "Autor" string, etwa so:

// 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)));

Das gibt Ihnen das Ergebnis, das Sie benötigen.

Andere Tipps

Ich weiß, Sie C # verwenden, aber das ist eine Zeit, wenn Sie ernsthaft ein VB.NET-Projektes zu Ihrer Lösung des Hinzufügen in Betracht ziehen sollten. XML-Literale ist perfekt für diese und macht es viel einfacher.

Um die XML-Daten aus Ihrem Autor Liste zu bekommen, würden Sie dies tun:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top