2010-12-08 208 views
1

我有一個List<Item>集合,我試圖從Linq到XML生成一個xml文件。Linq to XML查詢問題

List類低於:

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

我需要XML,看起來像這樣:

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

這是我試過的查詢,但我有沒有運氣往返於工作

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

我不斷收到一個錯誤,說它會創建無效的XML。有任何想法嗎?

錯誤是

此操作會創建一個結構錯誤的文檔。

在System.Xml.Linq.XDocument.ValidateDocument(XNode以前,XmlNodeType allowBefore,XmlNodeType allowAfter) 在System.Xml.Linq.XDocument.ValidateNode(XNode節點,XNode先前) 在System.Xml.Linq的。 XContainer.AddNodeSkipNotify(XNode N) 在System.Xml.Linq.XContainer.AddContentSkipNotify(對象內容) 在System.Xml.Linq.XContainer.AddContentSkipNotify(對象內容) 在System.Xml.Linq.XContainer.AddContentSkipNotify(對象內容) at System.Xml.Linq.XDocument..ctor(Object [] content)

+0

你可以複製/粘貼你有確切的錯誤? – 2010-12-08 04:58:20

+0

我在那裏添加了,沒有更多。 – John 2010-12-08 05:03:06

回答

4

試試這個:

using System; 
using System.Linq; 
using System.Xml.Linq; 

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

class Program 
{ 
    static void Main() 
    { 
     var collection = new[] 
     { 
      new Item {Id = 1, ItemName = "Super Sale Item Name"} 
     }; 

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

     Console.WriteLine(xdoc); 
    } 
} 

您缺少的主要原因是您收集的項目需要嵌套在第一個XElement(「項目」)中,而不是它的兄弟。請注意,new XElement("Items")...改爲new XElement("Items", ...

1

你關閉你的第一個的XElement太早:

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