12
votes

Convertir un document XML à un dictionnaire

Je n'ai pas besoin d'éditer un fichier XML ou quoi que ce soit, ceci est uniquement pour la lecture et l'analyse.

Je veux pouvoir gérer le document XML comme dictionnaire, comme: nom d'utilisateur = doc ["nom d'utilisateur"]; code>, mais je ne peux pas savoir comment "convertir" document. J'ai également rencontré le problème avec des noms de clés en double, mais cela pourrait être évité toutefois en ajoutant chaque valeur avec 1, 2 etc.; Faciliter la tâche facile à boucler aussi. P>

est-ce possible? Traiter le document XML (analysé) comme un dictionnaire? P>


Réponse à Mehrdad: Il varie de temps en temps, cela dépend de la demande de l'utilisateur. Si l'utilisateur demande x code>, il sera: p>

<xml>
<mengde>100</mengde>
<type>3</type>
<mail>foo</mail>
<crypt>bar</crypt>
<username>bar</username>
</xml>"


3 commentaires

Quelle est la structure du document XML?


Comment voulez-vous gérer les sous-documents? Qu'est-ce que doc ["foo"] retourner dans 1 4 5 ? Vous devez expliquer comment vous voulez accéder à Doc / FOO / A pour nous aider.


Les nœuds contenant des nœuds seront ignorés, je n'utilise que celles contenant du texte. Dans votre exemple: x, a et b.


4 Réponses :


5
votes

Données XML xxx

code de conversion xxx

Cette question était Demandé avant ici et vous pouvez donc trouver toutes les réponses dans ce lien:

Convertir XML vers le dictionnaire trié

espère qu'il aide.


1 commentaires

Ty, mais je préfère pouvoir utiliser le nom de tag que d'ajouter un attribut à tout.



0
votes

Ce n'est pas exactement ce que vous recherchez, mais peut-être d'intérêt: http://blogs.msdn.com/csharsfaq/archive/2009/10/01/dynamic-in-c-4-0- Introduction-the-expandoobject.aspx


1 commentaires

C'est pour le C # 4.0 et sur l'utilisation d'expandoObject et dynamique, donc cela ne m'aidait pas.



18
votes

Vous pouvez utiliser Linq vers XML pour faire ce que vous voulez (si je comprends ce que vous voulez) xxx


1 commentaires

Merci! Travaillé exactement comme prévu :)



4
votes

Votre question n'est vraiment pas très claire, mais je pense que cela fait ce que vous voulez:

XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<xml>
<mengde>100</mengde>
<type>2</type>
<foo>bar</foo>
</xml>");

Dictionary<string, string> d = new Dictionary<string, string>();
foreach (XmlNode n in doc.SelectNodes("/xml/*")
{
   d[n.Name] = n.Value;
}


0 commentaires