XML 应用非常广泛:Internet网页文件、聚合RSS文件(http://rss.sina.com.cn/news/marquee/ddt.xml)、程序配置文件、Webservice。
使用LINQ to XML 可以访问和修改内存中的文档对象模型(DOM),相比DOM,LINQ to XML 是一种更加轻量级的模型,创建、修改、查询更加方便;
1.新建一个Windows窗体应用程序如下:
2.代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
namespace WindowsFormsApplication11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//从网页上加载Rss文件
XElement doc = XElement.Load(this.textBox1.Text, LoadOptions.None);
//用LINQ检索所有子节点
var els = from v in doc.Elements() select v;
this.appendtree(els, treeView1.Nodes, null);
}
private void appendtree(IEnumerable<XElement> els, TreeNodeCollection tnc, XElement xe)
{
tnc.Clear();
if (els.Count<XElement>() == 0 && xe != null)
{
tnc.Add(new TreeNode(xe.Value));
return;
}
foreach (var item in els)
{
TreeNode tn = new TreeNode(item.Name.LocalName, new TreeNode[] { new TreeNode(string.Empty) });
tn.Tag = item;
tnc.Add(tn);
}
}
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{
if (e.Node != null)
{
XElement xe = e.Node.Tag as XElement;
if (xe != null)
{
//用LINQ查询子节点
var els = from el in xe.Elements() select el;
this.appendtree(els, e.Node.Nodes, xe);
}
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
e.Node.Expand();
}
}
}