【问题标题】:Creating a dictionary from xml从 xml 创建字典
【发布时间】:2014-09-09 15:27:32
【问题描述】:

鉴于此 XML:

<dataroot>
    <TestTable>
        <Tag>tag1</Tag>
        <FName>t1</FName>
    </TestTable>
    <TestTable>
        <Tag>tag2</Tag>
        <FName>t2</FName>
    </TestTable>
    <TestTable>
        <Tag>tag3</Tag>
        <FName>t3</FName>
    </TestTable>
</dataroot>

如何将其加载到字典中,以便在查找“Tag3”时返回“t3”?

我试过了:

var doc = XDocument.Load("ConfigItems.xml");
Dictionary<string, string> ConfigItems;
ConfigItems = doc.Descendants("TestTable").ToDictionary(v => v.Attribute("Tag").Value.ToString  (), v => v.Attribute("FName").Value.ToString());

但我得到一个“对象引用未设置为对象的实例”。错误。

【问题讨论】:

  • 你在哪里得到错误?你试过什么?
  • 那些不是属性,它们是元素。

标签: c# xml dictionary


【解决方案1】:

那些是not attributes, they are elements。这应该有效:

var doc = XDocument.Parse(s);
Dictionary<string, string> ConfigItems;
ConfigItems = doc.Descendants("TestTable")
  .ToDictionary(v => v.Element("Tag").Value,
                v => v.Element("FName").Value);
var item = ConfigItems["tag3"];
Console.WriteLine(item); // "t3"

一个属性应该是这样的:

<TestTable Tag="tag1" FName="t1" />

【讨论】:

  • 是的,我的错。一旦我切换到元素而不是属性,它就起作用了。非常感谢。
  • ToString 是多余的
  • @Selman22 原来如此!我复制/粘贴了 OP 的代码,但没有仔细查看所有细节。我现在已经删除了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2016-11-20
相关资源
最近更新 更多