2010-12-08 17 views
1

Ich habe eine List<Item> Sammlung, die ich versuche, eine XML-Datei von Linq zu XML zu generieren.Linq zu XML-Abfrageproblem

Die List-Klasse ist unten:

public class Item 
{ 
    public int Id { get; set; } 
    public string ItemName {get; set;} 
} 

Ich brauche XML zu erhalten, die wie folgt aussieht:

<Items> 
    <Item> 
    <ID>1</ID> 
    <Item_Name>Super Sale Item Name</Item_Name> 
    </Item> 
</Items> 

Hier ist die Abfrage, die ich versuchte, aber kein Glück habe immer zu arbeiten

XDocument xdoc = new XDocument(new XElement("Items"), 
      _myItemCollection.Select(x => new XElement("Item", 
              new XElement("ID", x.Id), 
              new XElement("Item_Name", x.ItemName)))); 

Ich bekomme immer eine Fehlermeldung, dass es ungültige XML erstellen würde. Irgendwelche Ideen?

Fehler sind

Dieser Vorgang ein falsch strukturiertes Dokument erstellen würde.

bei System.Xml.Linq.XDocument.ValidateDocument (XNode vorherigen, XmlNodeType allowBefore, XmlNodeType allowAfter) bei System.Xml.Linq.XDocument.ValidateNode (XNode Knoten XNode vorherige) bei System.Xml.Linq. XContainer.AddNodeSkipNotify (XNode n) bei System.Xml.Linq.XContainer.AddContentSkipNotify (Object-Gehalt) bei System.Xml.Linq.XContainer.AddContentSkipNotify (Object-Gehalt) bei System.Xml.Linq.XContainer.AddContentSkipNotify (Object Inhalt) bei System.Xml.Linq.XDocument..ctor (Object [] Inhalt)

+0

Können Sie copy/paste die genauen Fehler das Sie haben? –

+0

Ich habe es dort hinzugefügt, es gibt nicht viel mehr. – John

Antwort

4

Try this:

Die Hauptsache, die Sie vermissen, ist, dass das Projekt Ihrer Sammlung zu XElement in der ersten XElement ("Items") geschachtelt werden muss, anstatt es Geschwister ist. Beachten Sie, dass new XElement("Items")... geändert, um new XElement("Items", ...

+0

Das war es, musste das entfernen) und es hat gut funktioniert. Vielen Dank. – John

+0

Das sollte funktionieren, in Ihrem Code haben Sie ein 'XDocument' mit verschiedenen Wurzeln, was offensichtlich nicht richtig ist. –

1

Sie schließen Ihr erstes XElement zu früh:

XDocument doc = new XDocument(new XElement("Items", 
      items.Select(i => new XElement("Item", 
           new XElement("ID", i.Id), 
           new XElement("Name", i.Name)))));