2011-07-05 24 views
10

Ho bisogno di leggere un file XML in un dizionario.Lettura di XML in un dizionario

Ho letto poche guide e mi sono confuso solo con parole strane che non capisco (come nodi, convalida XML ecc.). Quindi, potresti per favore guidarmi?

Ho un file XML che è scritto in questo formato:

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

Come accennato, voglio conservarlo in un dizionario. Come potrei andare su questo?

+2

Domande e risposte come questa sono ciò che rende questo sito così fantastico. +1 per entrambi. – neverseenjack

risposta

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

Questo:

  • analizza il XML in un XElement (a partire da <database>)
  • itera sulle <def ...> elementi
  • forma un dizionario, utilizzando @number come chiave (interpretare come int) e @name come valore (come stringa)
  • assegna questo d ictionary a data, che è implicitamente tipizzato come Dictionary<int,string>
7

La tua domanda è semplice, ma non è inappropriato. Non ti preoccupare Spiegherò cosa dovresti fare.

prima devi caricare questo file XML (se si trova sul disco). In caso contrario, non è necessario questo passaggio

XDocument database = XDocument.Load(pathToYourXmlFile); 

fino a qui, è ottenuto:

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

poi si deve ottenere un elenco di tutte le def elementi:

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

fino a qui, hai ottenuto:

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

Ora, si dovrebbe ottenere ogni elemento della lista (ogni DEF in defs):

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; 
} 

il codice per estrarre informazioni da ogni definizione è:

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

Ora che avete il vostro numero e nome, aggiungilo al tuo dizionario.

dictionary.Add(number, name); 

Spero che questo aiuti.

+2

Dovrebbe essere 'database.Elements (" def "). ToList()'? – codeulike