详解c#读取XML的实例代码

2019-12-30 15:24:36刘景俊

直接把根结点选择出来了,后面不用SelectSingleNode方法选择根结点,直接创建结点即可,代码同上.

1.3 删除某一个数据

想要删除某一个结点,直接找到其父结点,然后调用RemoveChild方法即可,现在关键的问题是如何找到这个结点,上面的SelectSingleNode可以传入一个Xpath表,我们通过书的ISBN号来找到这本书所在的结点.如下:


 XmlElement xe = xmlDoc.DocumentElement; // DocumentElement 获取xml文档对象的根XmlElement.
   string strPath = string.Format("/bookstore/book[@ISBN="{0}"]", dgvBookInfo.CurrentRow.Cells[1].Value.ToString());
   XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.
   selectXe.ParentNode.RemoveChild(selectXe);

"/bookstore/book[@ISBN="{0}"]"是一个Xpath表达式,找到ISBN号为所选那一行ISBN号的那本书,有关Xpath的知识请参考:XPath 语法

1.4 修改某要条数据

修改某 条数据的话,首先也是用Xpath表达式找到所需要修改的那一个结点,然后如果是元素的话,就直接对这个元素赋值,如果是属性的话,就用SetAttribute方法设置即可.如下:


  XmlElement xe = xmlDoc.DocumentElement; // DocumentElement 获取xml文档对象的根XmlElement.
   string strPath = string.Format("/bookstore/book[@ISBN="{0}"]", dgvBookInfo.CurrentRow.Cells[1].Value.ToString());
   XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.
   selectXe.SetAttribute("Type", dgvBookInfo.CurrentRow.Cells[0].Value.ToString());//也可以通过SetAttribute来增加一个属性
   selectXe.GetElementsByTagName("title").Item(0).InnerText = dgvBookInfo.CurrentRow.Cells[2].Value.ToString();
   selectXe.GetElementsByTagName("author").Item(0).InnerText = dgvBookInfo.CurrentRow.Cells[3].Value.ToString();
   selectXe.GetElementsByTagName("price").Item(0).InnerText = dgvBookInfo.CurrentRow.Cells[4].Value.ToString();
   xmlDoc.Save(@"....Book.xml");

2.使用XmlTextReader和XmlTextWriter

XmlTextReader和XmlTextWriter是以流的形式来读写XML文件.

2.1XmlTextReader

使用XmlTextReader读取数据的时候,首先创建一个流,然后用read()方法来不断的向下读,根据读取的结点的类型来进行相应的操作.如下:

   


 XmlTextReader reader = new XmlTextReader(@"....Book.xml");
        List<BookModel> modelList = new List<BookModel>();
        BookModel model = new BookModel();
        while (reader.Read())
        {
          
          if (reader.NodeType == XmlNodeType.Element)
          {
            if (reader.Name == "book")
            {
              model.BookType = reader.GetAttribute(0);
              model.BookISBN = reader.GetAttribute(1);
            }
            if (reader.Name == "title")
            {
              model.BookName=reader.ReadElementString().Trim();
            }
            if (reader.Name == "author")
            {
              model.BookAuthor = reader.ReadElementString().Trim();
            }
            if (reader.Name == "price")
            {
              model.BookPrice = Convert.ToDouble(reader.ReadElementString().Trim());
            }
          }
   
          if (reader.NodeType == XmlNodeType.EndElement)
          {
            modelList.Add(model);
            model = new BookModel();
          }
   
          
        }
        modelList.RemoveAt(modelList.Count-1);
        this.dgvBookInfo.DataSource = modelList;