簡體   English   中英

將XML文件解析為C#IEnumerable的好方法是什么 <dynamic> ?

[英]What's a good way to parse an XML file into a C# IEnumerable<dynamic>?

假設我有一個像這樣的xml文件:

<items>
 <item>
    <id>1</id>
    <name>Item 1</name>
    <description>This is item 1</description>
    <quantityLeft>10</quantityLeft>
  </item>
... (more items)
</items>

我想將其解析為C#動態代碼,其中標記名稱(名稱,描述等)成為動態代碼的屬性(並包含標記內的數據)。

然后我可以在其中進行查詢.Where (i => i.id = 1)中對IEnumerable<dynamic>中的特定項目進行一些更改,然后更新XML文件。

XML文件不會太長,我只需要將其用作小型應用程序的數據庫即可,在該應用程序中,不會連接到實際的RDBMS。

可以將XML文件加載到XDocument中,將每個項目復制到ExpandoObject,對其進行操作,然后將項目復制回XDocument,然后保存到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");

我敢肯定,還有更好的選擇。

嘗試以下鏈接: http : //blogs.msdn.com/b/mcsuksoldev/archive/2010/02/04/dynamic-xml-reader-with-c-and-net-4-0.aspx

作為旁節點:Xml對動態不是很靈活。 例如,如何處理名稱空間? 為什么不使用XLinq? 它需要更多的類型輸入,但允許您保持靈活性,並避免動態類型輸入,以我的直言,這不適合與XML結合使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM