【问题标题】:Show xml file info into Listview C#在 Listview C# 中显示 xml 文件信息
【发布时间】:2015-05-08 13:54:29
【问题描述】:

我正在开发一个 C# 桌面应用程序,在一个模块中,我将 xml 文件的信息显示到一个列表视图中,我使用 Linq to XML 编写了我的解决方案,就像这样

string path = "prueba.xml";

            listView1.Items.Clear();
            listView1.Columns.Add(path, 400);

            XElement doc = XElement.Load(path);

            var result = from persona in doc.Elements("persona")
                         select new{
                             nombre = Convert.ToString(persona.Element("nombre").Value).Trim(),
                             ocupacion = Convert.ToString(persona.Element("ocupacion").Value).Trim()
                         };

 foreach (var persona in result)
            {
                /*ListViewItem item = new ListViewItem(persona.nombre);
                item.SubItems.Add(persona.ocupacion);*/

                ListViewItem nombre = new ListViewItem("<nombre>  " + persona.nombre + "  </nombre>");
                ListViewItem ocupacion = new ListViewItem("<ocupacion>  " + persona.ocupacion + "  </ocupacion>");
                listView1.Items.Add("<persona>");
                listView1.Items.Add(nombre);
                listView1.Items.Add(ocupacion);
                listView1.Items.Add("</persona>");
                listView1.Items.Add("");
            }
             }
        }

它工作得很好,你可以看到列表视图中有代表 xml 文件节点的项目,但这些项目是特定于这个 xml 文件的

<?xml version="1.0" encoding="utf-8" ?>
<personas>
  <persona>
    <nombre>Pablo el primero</nombre>
    <ocupacion>Programador Cliente-Servidor</ocupacion>
  </persona>
  <persona>
    <nombre>Pablo el segundo</nombre>
    <ocupacion>Programador Web</ocupacion>
  </persona>
</personas>  

正如您在 C# 代码中看到的那样,它适用于上面的 xml 文件,但如果我检索另一个具有不同节点名称的 xml 文件,例如

<juego>
<juegos>
<name id="ac"> God of War III </name>
...
</juegos>
</juego>

我的代码不会向我显示节点 &lt;juegos&gt;...&lt;/juegos&gt;,因为它仍会显示 &lt;person&gt;...&lt;/person&gt; 节点,因为它被创建为仅显示节点 &lt;person&gt;...&lt;/person&gt; 所以我的问题:有没有办法显示 xml 的信息使用 Linq to XML 将文件写入列表视图,同时显示在 xml 文件中编码的信息?

我想知道我是否可以在列表视图中显示这种格式:

<?xml version="1.0" encoding="utf-8" ?>
<personas>
  <persona>
    <nombre>Pablo el primero</nombre>
    <ocupacion>Programador Cliente-Servidor</ocupacion>
  </persona>
  <persona>
    <nombre>Pablo el segundo</nombre>
    <ocupacion>Programador Web</ocupacion>
  </persona>
</personas> 

【问题讨论】:

  • 为什么不使用 TreeView 来显示 XML 数据?
  • 您的意思是在列表视图中一般显示任何 xml 文件结构吗?

标签: c# xml winforms linq


【解决方案1】:

你不必使用 linq 来做,你可以简单地查询你的文档的元素。

listView1.View = System.Windows.Forms.View.Details;
listView1.AutoArrange = false;
listView1.Alignment = ListViewAlignment.Left;
listView1.Items.Clear();
listView1.Columns.Add("XML",400);

    string xml = 
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<personas>
  <persona>
    <nombre>Pablo el primero</nombre>
    <ocupacion>Programador Cliente-Servidor</ocupacion>
  </persona>
  <persona>
    <nombre>Pablo el segundo</nombre>
    <ocupacion>Programador Web</ocupacion>
  </persona>
</personas>";

        XDocument doc = XDocument.Parse(xml);
        List<ListViewItem> ItemList = new List<ListViewItem>();
        foreach (XElement elem in doc.Elements())
        {
            AddNewItemToList(ItemList, elem);
        }
        listView1.Items.AddRange(ItemList.ToArray());

...

private void AddNewItemToList(List<ListViewItem> ItemList, XElement elem)
    {
        string attributes = "";
        if (elem.HasAttributes)
        {
            foreach (XAttribute attr in elem.Attributes())
            {
                attributes += " " + attr.Name + "=\"" + attr.Value + "\"";
            }
        }

        if (elem.HasElements)
        {
            ItemList.Add(new ListViewItem("<" + elem.Name + attributes + ">"));
            foreach (XElement childElem in elem.Elements())
            {
                AddNewItemToList(ItemList, childElem);
            }
            ItemList.Add(new ListViewItem("</" + elem.Name + ">"));
        }
        else
        {
            ItemList.Add(new ListViewItem("<" + elem.Name + attributes + ">" + elem.Value + "</" + elem.Name + ">"));
        }
    }

【讨论】:

  • 你好 Arie,我刚刚尝试了你的解决方案,但它没有在 listView 中显示任何信息
  • 您的列表视图配置正确吗? listView1.View = System.Windows.Forms.View.Details 等?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多