一些主要代码
<HierarchicalDataTemplate ItemsSource="{Binding Children}"><TextBlock Text="{Binding Text}"/></HierarchicalDataTemplate>然后是rss类
public class Rss { int id;public int Id { get { return id; } set { id = value; } } int parentId;//这个暂时用不到public int ParentId { get { return parentId; } set { parentId = value; } }string text;//这个用来显示标题public string Text { get { return text; } set { text = value; } }string xmlUrl;//留着备用public string XmlUrl { get { return xmlUrl; } set { xmlUrl = value; } }public List<Rss> Children { get; set; } public Rss() { Children=new List<Rss>(); this.ParentId=-1; } }直接读取文件都写在主文件里了。
List<Rss> rsslist; public Window1() { InitializeComponent(); rsslist=new List<Rss>(); ReadOpml();//读取default.opml tr_1.ItemsSource=rsslist; }PRivate void ReadOpml() {string str= System.AppDomain.CurrentDomain.BaseDirectory; if (File.Exists("default.opml")) { XmlDocument doc = new XmlDocument(); doc.Load("default.opml"); XmlNodeList otls = doc.GetElementsByTagName("outline"); goTolist(otls);//把数据读取到list} else {//功能预留 MessageBox.Show("没有opml文件,创建一个空的default.opml"); File.Create("default.opml"); } }//openopmlprivate void goTolist(XmlNodeList otls){for(int i = 0; i<otls.Count;i++){if(otls[i].Attributes.GetNamedItem("type").InnerText == "NFgroup"){ Rss tmprss=new Rss(); tmprss.Id=i;tmprss.Text=otls[i].Attributes.GetNamedItem("text").InnerText; createChilren(tmprss,i,otls); rsslist.Add(tmprss); }}}//goTolistprivate void createChilren(Rss tmprss,int i,XmlNodeList otls){ for(int j=i+1;j<otls.Count;j++){ if(otls[j].Attributes.GetNamedItem("type").InnerText == "NFgroup") return; tmprss.Children.Add(new Rss{Id=j,ParentId=i,Text=otls[j].Attributes.GetNamedItem("text").InnerText}); } }考虑到只有两层所以就用循环遍历取数据,如果是多层的就要用到递归了。 下一步就是实现点击条目显示数据了。
新闻热点
疑难解答