Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将XML文件解析为C IEnumerable的好方法是什么?_C#_Xml_Linq_Dynamic - Fatal编程技术网

C# 将XML文件解析为C IEnumerable的好方法是什么?

C# 将XML文件解析为C IEnumerable的好方法是什么?,c#,xml,linq,dynamic,C#,Xml,Linq,Dynamic,假设我有这样一个xml文件: <items> <item> <id>1</id> <name>Item 1</name> <description>This is item 1</description> <quantityLeft>10</quantityLeft> </item> ... (more items) </

假设我有这样一个xml文件:

<items>
 <item>
    <id>1</id>
    <name>Item 1</name>
    <description>This is item 1</description>
    <quantityLeft>10</quantityLeft>
  </item>
... (more items)
</items>
我想将其解析为C动态,其中标记名、名称、描述等。。。成为动态上的属性,并包含标记中的数据

其中I=>I.id=1对于IEnumerable中的特定项,进行一些更改,然后更新XML文件

XML文件不会太长,我只需要它充当一个微型应用程序的数据库,在这个应用程序中,没有与实际RDBMS的连接。

您可以将XML文件加载到XDocument,将每个项目复制到ExpandooObject,对其进行操作,将项目复制回XDocument,然后保存到XML文件

负载:

保存:

我相信还有更好的选择。

您可以将XML文件加载到XDocument中,将每个项目复制到ExpandooObject中,对其进行操作,将项目复制回XDocument,然后保存到XML文件中

负载:

保存:

我相信还有更好的选择。

尝试以下链接:

作为一个侧节点:Xml到动态不是很灵活。例如,如何处理名称空间?为什么不使用XLinq?它需要更多的键入,但允许您保持灵活性并避免动态键入,而在我看来,动态键入并不是与XML结合的好选择。

请尝试以下链接:


作为一个侧节点:Xml到动态不是很灵活。例如,如何处理名称空间?为什么不使用XLinq?它需要更多的类型,但允许您保持灵活性并避免动态类型,而在我看来,动态类型并不是与XML结合使用的好选择。

有什么原因不能使用?可以使用System.Reflection.Emit创建动态类:有什么原因不能使用?可以使用谢谢,这看起来像是我要找的东西。老实说,这个应用程序很年轻,很小,几乎不需要重新使用,等等。。谢谢是否可以在不重写整个内容的情况下更新xml文件?谢谢,这看起来就像是我在寻找的内容。老实说,这个应用程序很年轻,很小,几乎不需要重新使用,等等。。谢谢是否可以在不重写整个内容的情况下更新xml文件?
List<dynamic> items = XDocument
    .Load("input.xml")
    .Element("items")
    .Elements("item")
    .Select(item =>
    {
        IDictionary<string, object> dict = new ExpandoObject();
        foreach (var element in item.Elements())
            dict[element.Name.LocalName] = (string)element;
        return (dynamic)dict;
    })
    .ToList();
var query = from item in items 
            where item.id == "1"
            select item;

foreach (var item in query)
{
    item.name = "New Name";
}
var doc = new XDocument(new XElement("items", items.Select(item =>
{
    IDictionary<string, object> dict = item as ExpandoObject;
    return new XElement("item", from kvp in dict
                                select new XElement(kvp.Key, kvp.Value));
})));

doc.Save("output.xml");