将XML存储在嵌套字典中

时间:2014-10-26 04:20:18

标签: c# xml linq dictionary

我有以下xml:

<root>
    <Animals>
        <Pet name ="Ruby">
            <Owner name = "John Smith"/>
            <Type name = "Dog"/>
            <Breed name = "Labrador"/>
            <Sex name = "Female"/>
            <Desexed name = "Yes"/>
            <Age name = "7 years"/>
        </Pet>
        <Pet name ="Charlie">
            <Owner name = "John Q"/>
            <Type name = "Dog"/>
            <Breed name = "Pug"/>
            <Sex name = "Female"/>
            <Desexed name = "No"/>
            <Age name = "2 Years"/>
        </Pet>
    </Animals>
</root>

我希望存储元素的名称及其名称的价值&#39;每个宠物的属性都是&#39;及其嵌套字典中的后代。我不知道字典是否是存储此信息的最佳方式,但如果我将其存储在字典中,我会将其存储在Dictionary<string, Dictionary<string, string>>中,其中密钥是宠物名称(例如Ruby,Charlie)和嵌套字典的关键是每个属性名称(Owner,Type,Breed,Sex,Desexed,Age),值是name属性的值。谁能帮我这个?我发现LINQ真的很混乱。目前,我将其存储在XDocument

2 个答案:

答案 0 :(得分:1)

这是你的意思吗?

var dictionary =
    xd
        .Descendants("Pet")
        .ToDictionary(
            x => x.Attribute("name").Value,
            x => x.Elements()
                .ToDictionary(
                    y => y.Name,
                    y => y.Attribute("name").Value));

我得到了这个结果:

nested dictionry

答案 1 :(得分:1)

我会构建一个类'Pet'作为数据的模块,并将每个元素读入Pet类。然后,我会将宠物保存在阵列中。字典不是一个好的选择,因为宠物名称可能不是唯一的。