博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

E10_XmlDocument 读取XML节点[B]

Posted on 2006-03-16 23:13  ╁蓝驿┲→  阅读(486)  评论(0编辑  收藏  举报

namespace example_12
{
 using System;
 using System.Web.UI;
 using System.Web.UI.WebControls;
 using System.Xml;

 /// <summary>
 /// _6 的摘要说明。
 /// </summary>
 public class _6 : Page
 {
  protected Label Label1;
  protected Label Label2;
  protected Label Label3;
  protected Label Label4;
  protected Label Label5;
  protected Label Label6;
  protected Label Label7;
  protected TextBox txtID;
  protected TextBox txtName;
  protected DropDownList dplGender;
  protected TextBox txtProvince;
  protected TextBox txtCity;
  protected TextBox txtStreet;
  protected TextBox txtPhone;
  protected TextBox txtMobilephone;
  protected Button btnAddRecord;
  protected Button btnNextRecord;
  protected Label Label8;
  protected System.Web.UI.WebControls.Button btnPreviousRecord;
  protected System.Web.UI.WebControls.Button btnDeleteRecord;
  protected static int index;//声明一个整形变量来表示当前记录的索引值(比如第一条记录index为0,第二条记录为1等);注意,此变量应该是一个static静态变量

  private void Page_Load(object sender, EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if (!Page.IsPostBack)//当此页面为第一次加载时
   {
    index = 0;//设置index为0
    LoadRecord(index);//显示索引值为0的记录
   }
  }

  #region Web 窗体设计器生成的代码

  protected override void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }

  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   this.btnDeleteRecord.Click += new System.EventHandler(this.btnDeleteRecord_Click);
   this.btnPreviousRecord.Click += new System.EventHandler(this.btnPreviousRecord_Click);
   this.btnNextRecord.Click += new System.EventHandler(this.btnNextRecord_Click);
   this.btnAddRecord.Click += new System.EventHandler(this.btnAddRecord_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }

  #endregion

  private void btnAddRecord_Click(object sender, EventArgs e)
  {
   AddRecord();//增加一条记录

  }

  private void LoadRecord(int index)
  {
   string filePath = Server.MapPath("通讯录(Created).xml");
   XmlDocument doc = new XmlDocument();
   XmlNode node = null;
   XmlNodeList nodelist = null;

   try
   {
    doc.Load(filePath);//装载路径所指定的文件

    nodelist = doc.GetElementsByTagName("联系人");//得到名为"联系人"的一组元素节点
    node = nodelist[index];//将node指向要显示的那个“联系人”节点
    txtID.Text = node.Attributes[0].Value;//显示属性"ID"
    node = node.FirstChild;//将node指向联系人的第一个子节点(姓名)
    txtName.Text = node.InnerText;//显示“姓名”节点的值
    node = node.NextSibling;//将node指向“姓名”的下一个兄弟节点(性别)
    dplGender.SelectedValue = node.InnerText;//显示“性别”节点的值
    node = node.NextSibling.FirstChild;//将node指向“姓名”的下一个兄弟节点的子节点(省份)
    txtProvince.Text = node.InnerText;//显示“省份”节点的值
    node = node.NextSibling;//将node指向“省份”节点的下一个兄弟节点(城市)
    txtCity.Text = node.InnerText;//显示“城市”节点的值
    node = node.NextSibling;//将node指向“城市”节点的下一个兄弟节点
    txtStreet.Text = node.InnerText;//显示“街道”节点的值
    node = node.ParentNode.NextSibling;//将node指向“街道”节点的父节点的下一个兄弟节点(电话)
    txtPhone.Text = node.InnerText;//显示“街道”节点的值
    node = node.NextSibling;//将node指向“街道”节点的下一个兄弟节点(手机)
    txtMobilephone.Text = node.InnerText;//显示“手机”节点的值
   }
   catch (Exception err)
   {
    Response.Write(err.ToString());
   }
   finally
   {
    
   }

   if (index == nodelist.Count - 1)
   {
    btnNextRecord.Enabled = false;//若当前处在最后一条记录,“下一条记录”按钮失效
   }
   else
   {
    btnNextRecord.Enabled  = true;//若不是,“下一条记录”按钮有效
   }

   if (index == 0)
   {
    btnPreviousRecord.Enabled = false;//若当前处在第一条记录,“上一条记录”按钮失效
   }
   else
   {
    btnPreviousRecord.Enabled = true;//若不是,“上一条记录”按钮有效
   }

  }

  private void AddRecord()
  {
   string filePath = Server.MapPath("通讯录(Created).xml");
   XmlDocument doc = new XmlDocument();
   XmlNode node = null;
   XmlNode parentNode = null;
   XmlAttribute attr = null;

   try
   {
    doc.Load(filePath);//装载事先已存在的XML文件(初始文件内容应该为 <xml version="1.0" encoding="utf-8"><通讯录></通讯录>)

    node = doc.CreateElement("联系人");//将node指向新创建的元素节点“联系人”
    attr = doc.CreateAttribute("ID");//将attr指向新创建的属性“ID”
    attr.Value = txtID.Text.Trim();//将输入的值作为属性“ID”的Value
    node.Attributes.Append(attr);//将属性“ID”添加到元素节点“联系人”
    parentNode = doc.DocumentElement;//将parentNode指向此XML文档的根元素(通讯录)
    parentNode.AppendChild(node);//将“联系人”节点添加为“通讯录”节点的子节点

    parentNode = node;//将parentNode指向当前node(联系人)
    node = doc.CreateElement("姓名");//创建“姓名”节点
    node.InnerText = txtName.Text.Trim();
    parentNode.AppendChild(node);

    node = doc.CreateElement("性别");//创建“性别”节点
    node.InnerText = dplGender.SelectedValue;
    parentNode.AppendChild(node);

    node = doc.CreateElement("地址");//创建“地址”节点
    parentNode.AppendChild(node);

    parentNode = node;//将parentNode指向当前node(地址)
    node = doc.CreateElement("省份");//创建“省份”节点
    node.InnerText = txtProvince.Text.Trim();
    parentNode.AppendChild(node);

    node = doc.CreateElement("城市");//创建“城市”节点
    node.InnerText = txtCity.Text.Trim();
    parentNode.AppendChild(node);

    node = doc.CreateElement("街道");//创建“街道”节点
    node.InnerText = txtStreet.Text.Trim();
    parentNode.AppendChild(node);

    parentNode = parentNode.ParentNode;//将parentNode指向当前节点的父节点(联系人)
    node = doc.CreateElement("电话");//创建“电话”节点
    node.InnerText = txtPhone.Text.Trim();
    parentNode.AppendChild(node);

    node = doc.CreateElement("手机");//创建“手机”节点
    node.InnerText = txtMobilephone.Text.Trim();
    parentNode.AppendChild(node);


    doc.Save(filePath);//将DOM保存为XML文档
    index++;//索引+1
    LoadRecord(index);//显示新添加的记录

    Response.Write("记录添加成功");
   }
   catch (Exception err)
   {
    Response.Write(err.ToString());
   }
   finally
   {
   }

  }

  private void btnNextRecord_Click(object sender, EventArgs e)
  {

    index++;
    LoadRecord(index);//显示下一条记录
  }
  private void btnPreviousRecord_Click(object sender, System.EventArgs e)
  {
    index--;
    LoadRecord(index);//显示上一条记录
  }

  private void btnDeleteRecord_Click(object sender, System.EventArgs e)
  {
   string filePath = Server.MapPath("通讯录(Created).xml");
   XmlDocument doc = new XmlDocument();
   XmlNode node = null;
   XmlNodeList nodelist = null;
   XmlNode parentNode = null;
   
   try
   {
    doc.Load(filePath);

    nodelist = doc.GetElementsByTagName("联系人");
    node = nodelist[index];
    parentNode = doc.DocumentElement;//将parentNode指向文档的根节点(通讯录)

    parentNode.RemoveChild(node);//将当前的“联系人”删除
   
    doc.Save(filePath);//保存XML文档。(无必要保存,否则文件不会有任何变化)
    if (index != 0)
    {
     index--;
    }
    LoadRecord(index);//显示上一条记录
    Response.Write("记录删除成功");
   }
   catch (Exception err)
   {
    Response.Write(err.ToString());
   }
   finally
   {
    
   }
 
  
  }
 }
}