2009-05-01 7 views
1

mit Xmltextreader, wie würde ich eine Hashtabelle laden.Wie kann ich eine Hashtabelle aus einer einfachen XML-Datei mit xmltextreader laden

XML:

<base><user name="john">2342343</user><user name="mark">239099393</user></base> 

Dies wurde vor gefragt, aber es wurde mit etwas flippigen Linq, die ich nicht vollständig mit nur noch bequem bin.

+0

Nun, LINQ to XML wird mit ziemlicher Sicherheit der einfachste Weg sein. Suchen Sie definitiv nach einer Nicht-LINQ-Lösung? –

+0

Was ist mit XMLSerializer? Wäre das nicht einfacher als XLINQ? –

Antwort

2

Nun, die LINQ to XML-Lösung ist wirklich einfach, also schlage ich vor, dass wir versuchen, Sie damit vertraut zu machen, anstatt eine komplexere Lösung zu erstellen. Hier ist der Code, mit vieler Erklärung ...

// Load the whole document into memory, as an element 
XElement root = XElement.Load(xmlReader); 

// Get a sequence of users 
IEnumerable<XElement> users = root.Elements("user"); 

// Convert this sequence to a dictionary... 
Dictionary<string, string> userMap = users.ToDictionary(
     element => element.Attribute("name").Value, // Key selector 
     element => element.Value);     // Value selector 

Natürlich Sie dies alles in einem Rutsch machen könnten - und ich würde wahrscheinlich die zweiten und dritte Aussagen kombinieren. Aber das ist so konzeptionell einfach wie es wahrscheinlich wird. Es würde komplizierter werden, wenn man die Fehlerbehandlung so um die Möglichkeit legen wollte, dass ein Benutzerelement zwar keinen Namen hat, aber zugegebenermaßen. (Dieser Code wird in diesem Fall eine NullReferenceException auslösen.)

Beachten Sie, dass davon ausgegangen wird, dass Sie den Namen als Schlüssel und ID als Wert verwenden möchten. Wenn Sie die Hashtabelle umgekehrt haben möchten, wechseln Sie einfach die Reihenfolge der Lambda-Ausdrücke.

+0

hmm..ich bekomme ein 'enthält keine Definition oder Erweiterung für ToDictionary (..)'? Verwenden von asp.net 4.0 – Blankman