2010-09-28 3 views
1

Je vais avoir un fichier xml commeComment afficher les données du fichier XML à ListView en utilisant LINQ to XML?

<Root> 
<Child val1="1" val2="2"/> 
<Child val1="1" val2="3"/> 
<Child val1="2" val2="4"/> 
</Root> 

i besoin d'afficher les données du fichier Xml à un Listview comme

alt text

(Ajouté A à la valeur d'index)

Maintenant j'utilise comme

1.Stocke les données dans un XmlNodesList

2.Puis itérer le nodeslist et ajouter la valeur d'attribut à la vue de la liste

Ici, je ne peux pas utiliser Dictionary<String,String> comme un stockage temporaire, car il existe plusieurs clés avec le même nom.

Y a-t-il une idée pour le faire en utilisant LINQ to XML?

+0

WinForms, non? – abatishchev

+0

@ abatishchev: Oui ... Titre modifié :-) –

+0

Il est plutôt préférable d'utiliser des balises au lieu du titre;) – abatishchev

Répondre

1

Sans LINQ:

var doc = new System.Xml.XmlDocument(); 
doc.LoadXml(xml); 

var nodes = doc.SelectNodes("Root/Child"); 

for (int i = 0; i < nodes.Count; i++) 
{ 
    var n = nodes[i]; 
    var index = String.Format("A{0}", i + 1); 
    var column1 = n.Attributes["val1"].Value; 
    var column2 = n.Attributes["val1"].Value; 

    // use variables to add an item to ListView 
} 

LINQ:

using System.Linq; 

var doc = new System.Xml.XmlDocument(); 
doc.LoadXml(xml); 

var nodes = doc.SelectNodes("Root/Child"); 
var arr = nodes 
    .OfType<XmlNode>() 
    .ToArray(); 

var result = arr 
    .Select(n => 
     new 
     { 
      ClNo = String.Format("A{0}", Array.IndexOf(arr, n) +1), 
      Val1 = n.Attributes["val1"].Value, 
      Val2 = n.Attributes["val2"].Value, 
     }); 

ListView list = new ListView(); 
ListViewItem[] items = result 
    .Select(r => new ListViewItem(new[] { r.ClNo, r.Val1, r.Val2 }) 
    .ToArray(); 
list.Items.AddRange(items); 
+0

@abatishchev:' Populate() '- je ne comprends pas cela –

+0

I signifient que 'Populate()' renvoie des données 'XmlNodeList' de votre fichier XML, par exemple' doc.SelectNodes ("root/child"); ' – abatishchev

+0

@abatishchev: Merci, mais il lance une erreur comme' Un déclarant de membre de type anonyme non valide Les membres de type anonymes doivent être déclarés avec une assignation de membre, un nom simple ou un accès membre. » J'utilise le .NET 3.5 cadre de travail –