结合读取opml ,把数据链接到treeview

时间:2021-04-30 09:44:25

一些主要代码

<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");
}

}//openopml
private 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);
}
}
}//goTolist
private 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});
}

}

考虑到只有两层所以就用循环遍历取数据,如果是多层的就要用到递归了。
结合读取opml ,把数据链接到treeview
下一步就是实现点击条目显示数据了。