我有一个List<Item>
集合,我试图生成一个使用Linq到XML的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 previous,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(对象内容) 在System.Xml.Linq.XDocument..ctor(Object [] content)
答案 0 :(得分: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
的项目需要嵌套在第一个XElement
(“项目”)而不是它的兄弟。请注意,new XElement("Items")...
已更改为new XElement("Items", ...
答案 1 :(得分: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)))));