2011-07-05 22 views
10

XMLファイルを辞書に読み込む必要があります。XMLを辞書に読み込む

私はいくつかのガイドを読んでいました。私は理解できない奇妙な言葉(ノード、XML検証など)から混乱しました。 だから、私を歩いてもらえますか?

私はこの形式で書かれているXMLファイルを持っている:述べたように

<database> 
    <def number="1" name="one"/> 
    <def number="2" name="two"/> 
</database> 

を、私は辞書でそれを保存したいです。それについてどうすればいいのですか?

+2

このような質問と回答は、このサイトをすごくすばらしいものにしています。両方の場合+1。 – neverseenjack

答えて

14
var data = XElement.Parse(xml) 
    .Elements("def") 
    .ToDictionary(
     el => (int)el.Attribute("number"), 
     el => (string)el.Attribute("name") 
    ); 

これ:

  • <def ...>要素
  • XElement<database>始まる)
  • 反復にXMLとして解釈する(キーとして@numberを使用して、辞書を構成する構文解析int)、値として@name(文字列として)
  • はこのdを割り当てます暗黙的Dictionary<int,string>
7

あなたの質問として入力されdataにictionaryは、基本的な、しかし、不適切ではありません。心配しないでください。私はあなたがすべきことを説明します。

まず、このXMLファイルをディスクにロードする必要があります。それ以外の場合はこの手順ここまで

XDocument database = XDocument.Load(pathToYourXmlFile); 

を必要としない、あなたが得た:

List<XElement> defs = database.Elements("def"); 

<database> 
    <def number="1" name="one"/> 
    <def number="2" name="two"/> 
</database> 

は、その後、あなたがすべてのDEF要素のリストを取得する必要がありますここまで:

<def number="1" name="one"/> 
<def number="2" name="two"/> 

さて、あなたは、リストの各項目(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; 
} 

各デフから情報を抽出するためのコードは次のとおりです。

int number = def.Attribute("number").value; 
string name = def.Attribute("name").value; 

今、あなたはあなたの番号を持っていることと、名前、あなたの辞書に追加するだけです。

dictionary.Add(number, name); 

希望します。

+2

これは 'database.Elements(" def ")。ToList()'にする必要がありますか? – codeulike

関連する問題