• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

『C#基础』XML文件的读与写

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

几点说明

  1. 由于手头正好有一个程序上有现成的读写XML的代码,所以就近研究一下~
  2. 代码的版本是.NET 1.1 的~
  3. 使用到的命名空间:
    1. System.Xml
  4. 读取XML步骤
    1. 实例化一个XmlDocument对象
    2. 使用XmlDocument.Load(文件目录+文件名称)方法将XML文件读到内存中
    3. 使用foreach迭代与XmlElement对象来遍历已经读到内存中的XmlDocument.DocumentElement
    4. 使用XmlElement[Key].InnerText来读取对应Key元素的值
  5. 写入XML步骤
    1. 将要写入的XML文件读入内存
    2. 使用迭代来检查一下XML中是否有想要写入的节点
    3. 如果有,则使用XmlElement[Key].InnerText = Value
    4. 如果没有,则使用XmlElement Key = XmlDocument.CreateElement("Key")来创建一个Xml节点
      1. 使用XmlElement Child_Key = XmlDocument.CreateElement("Child_Key")再创建一个Xml节点
      2. 使用Child_Key.InnerText = "Value";来赋节点值
      3. 使用Key.AppendChild(Child_Key)来给对应的Key添加一个子节点
    5. 使用System.IO.FileInfo info = new System.IO.FileInfo(路径+Xml文件名)来获取文件信息
      1. 使用info.Attributes来获取文件的属性
      2. 使用info.Attributes == System.IO.FileAttributes.ReadOnly来确定文件是否是只读
      3. 如果是只读,则可以会用System.IO.FileAttributes.Normal来恢复文件初始属性,以解掉Xml文件的只读属性
    6. 使用XmlDocument.Save(路径+Xml文件名);来将之前写入数据的XML保存

 

样例界面

参考代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Xml;
using System.IO;

namespace csdemo2008.Wpf_Spring.XmlWindow
{
    /// <summary>
    /// XmlWindow.xaml 的交互逻辑
    /// </summary>
    public partial class XmlWindow : Window
    {
        public XmlWindow()
        {
            InitializeComponent();
        }

        private void btnClose_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        XmlDocument doc = new XmlDocument();
        // 写入XML文件
        private void btnWrite_Click(object sender, RoutedEventArgs e)
        {
            string nodeText = tbNode.Text.Trim();
            try
            {
                doc.Load("God.xml");
            }
            catch
            {
                XmlTextWriter writer = new XmlTextWriter("God.xml", Encoding.UTF8);
                writer.WriteStartElement("rootNode");
                writer.WriteStartElement("innerNode");
                writer.WriteAttributeString("name", "InnerNode");
                writer.WriteStartElement("childNode");
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.Close();

                doc.Load("God.xml");
            }

            bool isExist = false;
            foreach (XmlElement element in doc.DocumentElement)
            {
                // 这里读入的element是doc的第一级子节点,也就是innerNode
                if (element.Name == "innerNode" && element.HasChildNodes)
                {
                    foreach (XmlNode node in element.ChildNodes)
                    {
                        if (node.Name == "childNode" && node.InnerText != nodeText)
                        {
                            node.InnerText = nodeText;
                        }
                        isExist = true;
                    }
                }
                else
                {
                    doc.RemoveChild(element);
                }
            }

            if (isExist == false)
            {
                XmlElement elementRoot = doc.CreateElement("innerNode");
                XmlElement elementInner = doc.CreateElement("childNode");

                elementInner.InnerText = "『峻之岭峰』- http://www.cnblogs.com/sitemanager/";
                elementRoot.AppendChild(elementInner);

                // 注意,这里是加在RootElement之内的!
                doc.DocumentElement.AppendChild(elementRoot);
            }

            FileInfo info = new FileInfo("God.xml");
            if (info.Attributes == FileAttributes.ReadOnly)
            {
                info.Attributes = FileAttributes.Normal;
            }
            doc.Save("God.xml");
            info.Attributes = FileAttributes.ReadOnly;

            tbNode.Text = null;
        }

        // 读取XML文件
        private void btnRead_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                doc.Load("God.xml");
            }
            catch
            {
                MessageBox.Show("没有这个XML文件!请先点击写入文件来创建它!");
            }

            if (tbNode.Text.Trim() == "")
            {
                tblDisplay.Text += doc.InnerXml + "\n";
            }
            else
            {
                foreach (XmlElement element in doc.DocumentElement)
                {
                    if (element.HasChildNodes)
                    {
                        foreach (XmlNode node in element.ChildNodes)
                        {
                            if (node.InnerText == tbNode.Text.Trim())
                            {
                                tblDisplay.Text += node.InnerText + "\n";
                            }
                            else
                            {
                                tblDisplay.Text += "没有对应节点!\n";
                            }
                        }
                    }
                    else
                    {
                        tblDisplay.Text += element.InnerXml + "\n";
                    }
                }
            }
            tbNode.Text = null;
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            tbNode.Text = null;
            tblDisplay.Text = null;
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                FileInfo info = new FileInfo("God.xml");
                info.Attributes = FileAttributes.Normal;
                info.Delete();
            }
            catch(Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }
    }
}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#使用Session解决前后台分离验证码问题发布时间:2022-07-10
下一篇:
C#多线程池演示例程--下载图片发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap