Linq to XML查询问题

发布于 2024-10-07 05:02:37 字数 1271 浏览 3 评论 0原文

我有一个 List 集合,我尝试使用 Linq to 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 先前,XmlNodeTypeallowBefore,XmlNodeTypeallowAfter) 在 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[] 内容)

I have a List<Item> collection that I am trying to generate an xml file from using Linq to XML.

The List class is below:

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

I need to get XML that looks like this:

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

Here's the query I tried but am having no luck getting to work

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

I keep getting an error saying it would create invalid XML. Any ideas?

Error is

This operation would create an incorrectly structured document.

at System.Xml.Linq.XDocument.ValidateDocument(XNode previous, XmlNodeType allowBefore, XmlNodeType allowAfter)
at System.Xml.Linq.XDocument.ValidateNode(XNode node, XNode previous)
at System.Xml.Linq.XContainer.AddNodeSkipNotify(XNode n)
at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
at System.Xml.Linq.XDocument..ctor(Object[] content)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

送你一个梦 2024-10-14 05:02:37

试试这个:

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 (“Items”)中,而不是它的同级中。请注意,new XElement("Items")... 更改为 new XElement("Items", ...

Try this:

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

The main thing you are missing is that the project of your collection to XElement needs to be nested in the first XElement ("Items") rather than it's sibling. Notice that new XElement("Items")... is changed to new XElement("Items", ...

递刀给你 2024-10-14 05:02:37

您太早关闭第一个 XElement:

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

You're closing your first XElement too early:

XDocument doc = new XDocument(new XElement("Items",
            items.Select(i => new XElement("Item",
                                new XElement("ID", i.Id),
                                new XElement("Name", i.Name)))));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文