【问题标题】:Storing XML in a nested dictionary将 XML 存储在嵌套字典中
【发布时间】:2014-10-26 04:20:18
【问题描述】:

我有以下 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>

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

【问题讨论】:

  • 您有问题吗?你在这里问什么并不完全清楚。我的猜测是:每个“宠物”的信息对我来说就像一个单一的数据容器对象。为什么不只声明一个具有 Owner、Type、Breed 等的类作为存储这些信息的属性?您可以将该类的实例用作字典中的值,其中宠物名称是键。
  • I wish to store it 怎么样?为了什么?这非常模糊
  • 宠物名是唯一的吗?如果不是 Dic 不是你最好的选择
  • 您可以使用 XmlDocument 读取 XML 并将其存储在内存中(如果这是您的意思):msdn.microsoft.com/en-us/library/…

标签: c# xml linq dictionary


【解决方案1】:

这是你的意思吗?

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

我得到这个结果:

【讨论】:

  • 非常感谢。我将 'y => y.Name' 更改为 'y => y.Name.ToString()' 的一件小事,以便嵌套字典是 而不是 。谢谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多