将XML读入字典

Mas*_*tic 10 c# xml dictionary readxml

我需要将XML文件读入字典.

我阅读了一些指南,我只是对我不理解的奇怪单词(如节点,XML验证等)感到困惑.那么,请你帮我一下走吧?

我有一个XML文件,以这种格式编写:

<database>
    <def number="1" name="one"/>
    <def number="2" name="two"/>
</database>
Run Code Online (Sandbox Code Playgroud)

如上所述,我想将它存储在字典中.我该怎么办呢?

Mar*_*ell 15

var data = XElement.Parse(xml)
    .Elements("def")
    .ToDictionary(
        el => (int)el.Attribute("number"),
        el => (string)el.Attribute("name")
    );
Run Code Online (Sandbox Code Playgroud)

这个:

  • 解析xml到XElement(从<database>)开始
  • 迭代<def ...>元素
  • 形成一个字典,@number用作键(解释为a int)和@name值(作为字符串)
  • 将此字典分配给data,隐式输入为Dictionary<int,string>


Sae*_*ati 9

你的问题是基本的,但不是不恰当的.别担心.我会解释你应该做些什么.

首先,您必须加载此XML文件(如果它在磁盘上).否则你不需要这一步

XDocument database = XDocument.Load(pathToYourXmlFile);
Run Code Online (Sandbox Code Playgroud)

到了这里,你得到:

<database>
    <def number="1" name="one"/>
    <def number="2" name="two"/>
</database>
Run Code Online (Sandbox Code Playgroud)

然后你必须得到所有def元素的列表:

List<XElement> defs = database.Elements("def");
Run Code Online (Sandbox Code Playgroud)

到了这里,你得到:

<def number="1" name="one"/>
<def number="2" name="two"/>
Run Code Online (Sandbox Code Playgroud)

现在,你应该得到列表中的每个项目(defs中的每个def):

foreach(XElement def in defs)
{
    // Here you have each def <def number="x" name="y" />
    int number = def.Attribute("number").value;
    string name = def.Attribute("name").value;
}
Run Code Online (Sandbox Code Playgroud)

从每个def中提取信息的代码是:

int number = def.Attribute("number").value;
string name = def.Attribute("name").value;
Run Code Online (Sandbox Code Playgroud)

现在你有了你的号码和名字,只需将它添加到你的字典中即可.

dictionary.Add(number, name);
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 应该是`database.Elements("def").ToList()`? (3认同)