我想编写一个播放器,treeview里的内容是获取xml文档里的内容,现在能显示了,但是不知道如何将节点的url提交给webBrowser控件。
xml内容:<?xml version="1.0" encoding="utf-8"?>
<movies id="0" name="今日更新">
  <m_name id="1" name="我的青春谁做主">
    <several id="1" name="第1集" url="/play/youku.html?id=5645" target="_blank" />
    <several id="2" name="第2集" url="/play/youku.html?id=5645" target="webBrowser1" />
    <several id="3" name="第3集" url="/play/youku.html?id=45232" target="webBrowser1" />
    <several id="4" name="第4集" url="/play/youku.html?id=56344" target="webBrowser1" />
  </m_name>
  <m_name id="2" name="婚姻保卫战">
    <several id="1" name="第1集" url="/play/56.html?id=23434" target="webBrowser1" />
    <several id="2" name="第2集" url="/play/56.html?id=5645" target="webBrowser1" />
    <several id="3" name="第3集" url="/play/56.html?id=45232" target="webBrowser1" />
    <several id="4" name="第4集" url="/play/56.html?id=56344" target="webBrowser1" />
  </m_name>
  <m_name id="3" name="奋斗">
    <several id="1" name="第1集" url="/play/tudou.html?id=23434" target="webBrowser1" />
    <several id="2" name="第2集" url="/play/tudou.html?id=5645" target="webBrowser1" />
    <several id="3" name="第3集" url="/play/tudou.html?id=45232" target="webBrowser1" />
    <several id="4" name="第4集" url="/play/tudou.html?id=56344" target="webBrowser1" />
  </m_name>
  
</movies>
c#代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Runtime.Serialization.Formatters.Binary;namespace maxplayer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            bind1();
        }
        //显示根节点
        private void bind1()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("XMLFile1.xml".Trim());
            XmlElement root = xmlDoc.DocumentElement;
            TreeNode trRoot = new TreeNode(root.Attributes["name"].Value);
            this.treeView1.Nodes.Add(trRoot);            for (int i = 0; i < root.ChildNodes.Count; i++)
            {
                TreeNode trNode = new TreeNode(root.ChildNodes[i].Attributes["name"].Value);
                XmlNode xmlNode = root.ChildNodes[i];
                trRoot.Nodes.Add(trNode);
                setChild(trNode, xmlNode);
            }
        }        //显示子节点
        private void setChild(TreeNode node, XmlNode xmlNode)
        {
            int num = 0;
            foreach (XmlNode nodexml in xmlNode.ChildNodes)
            {
                TreeNode nd = new TreeNode(nodexml.Attributes["name"].Value);
                TreeNode nodes = new TreeNode();
                XmlNode xmlNd = xmlNode.ChildNodes[num];
                node.Nodes.Add(nd);
                setChild(nd, xmlNd);
                num++;
            }
        }        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            
        }    }
}
我设置了一个webBrowser控件,当双击每一集的时候,就将那集里的url地址提交给webBrowser,并调用相应的html文件显示,请教怎么写代码呢?谢谢。

解决方案 »

  1.   

    还有就是xml文件要不要修改的?
      

  2.   

    treeview_afterselect事件中使用webBrowser.Navigate跳转到相关播放地址
    也可直接使用播放器播发
      

  3.   

    将Url放到TreeNode 的Tag中去例如
    TreeNode trNode = new TreeNode(root.ChildNodes[i].Attributes["name"].Value);
    trNode.Tag = root.ChildNodes[i].Attributes["url"].Value然后在AfterSelect中取得Node的值private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                e.Node.Tag.ToString() 就应该是url了
            }
      

  4.   

    谢谢回答,但是trNode.Tag = root.ChildNodes[i].Attributes["url"].Value这句有错误,不能通过
      

  5.   

    能娶到Name应该能取到url啊。
    <several id="1" name="第1集" url="/play/youku.html?id=5645" target="_blank" />大体思路就是我3楼说的,你自己调试下吧。
      

  6.   

    好像“TreeNode trRoot = new TreeNode(root.Attributes["name"].Value);”这里只是取根节点即“<m_name id="1" name="我的青春谁做主">”里的name,在这里取url就报错,而下面的“TreeNode nd = new TreeNode(nodexml.Attributes["name"].Value);”是取子节点“<several id="1" name="第1集" url="/play/youku.html?id=5645" target="_blank" />”里的name,我在它下面加了这句:
    TreeNode nd = new TreeNode(nodexml.Attributes["name"].Value);
    nd.Tag = nodexml.Attributes["url"].Value;能运行通过,但是下面的e.Node.Tag.ToString();又报错了:未将对象引用设置到对象的实例。
      

  7.   

    点击
    <several id="1" name="第1集" url="/play/56.html?id=23434" target="webBrowser1" />这个节点也会报"未将对象引用设置到对象的实例"的错吗?
      

  8.   

    e.Node.Tag.ToString();又报错了:未将对象引用设置到对象的实例。你的TreeView中,不是任何一个Node的Tag都包含URL String,自己做个判断,这是编程的习惯问题.
      

  9.   


    多谢提醒,这个问题解决了。
              private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                if (e.Node.Tag != null)
                {
                    MessageBox.Show(e.Node.Tag.ToString());
                }
            }
    通过