【C#】C#操作XML

项目格式

新建一个控制台应用程序,名称为Demo,在项目内新建一个文件夹,用于存放操作XML的代码。文件夹名称为xml。
在这里插入图片描述

定义接口

  1. 先定义好接口,规范要使用的功能。

  2. 在xml文件夹内,新建一个文件 IXMLHelper.cs,用于定义接口和对象生成器。

  3. 接口内只定义了2个函数:

    GetXMLData用于解析XML文件,读取XML的内容到对象里;
    SetXMLData用于将对象写入的XML文件内。
    Msg属性,用于标识程序的运行信息。

  4. Maker类只有一个静态方法 NewXmlHelper ,用于生成一个实现了接口的对象实例。

namespace xml
{
    /// <summary>
    /// 操作 XML文件
    /// </summary>
    /// <typeparam name="T">类名,XML实例化</typeparam>
    public interface IXMLHelper<T>
    {
        string Msg { get; set; }
        T GetXMLData(T model, string fp);
        T SetXMLData(T model, string fp);
    }

    /// <summary>
    /// 生产接口的对象实例
    /// </summary>
    public class Maker<T>
    {
        /// <summary>
        /// 生产XML接口的对象实例
        /// </summary>
        public static IXMLHelper<T> NewXmlHelper()
        {
            return new XMLHelper<T>();
        }
    }
}

实现接口

在xml文件夹内,新建一个XMLHelper.cs 文件,自定义成xml命名空间。
主要使用了 System.Xml.Serialization 库
Serialize函数:把对象转成XML数据
Deserialize函数:把XML数据解析成对象数据 。

using System.Xml.Serialization;
namespace xml
{

    internal class XMLHelper<T> : IXMLHelper<T>
    {
        public string Msg { get; set; }
        public T GetXMLData(T model, string fp)
        {
            try
            {
                Type t = model.GetType();
                XmlSerializer xs = new XmlSerializer(t);
                TextReader tr = new StreamReader(fp);
                model = (T)xs.Deserialize(tr);
                tr.Close();
                Msg = "OK";
                return model;
            }
            catch (Exception e)
            {
                Msg = "[error] " + e.Message;
                return model;
            }
        }
        public T SetXMLData(T model, string fp)
        {
            try
            {

                Type t = model.GetType();
                XmlSerializer xs = new XmlSerializer(t);
                TextWriter tw = new StreamWriter(fp);
                xs.Serialize(tw, model);
                tw.Close();
                Msg = "OK";
                return model;
            }
            catch (Exception e)
            {
                Msg = "[error] " + e.Message;
                return model;
            }
        }
    }
}

使用接口

1. 定义一个映射类

在xml文件夹内,新建一个Data.cs文件:

namespace xml{
    public class XMLData 
    {
        public string Name {get;set;}
        public int Age {get;set;}
    }
}

2. 将数据写入到xml文件:

var xmlHelper = xml.Maker<xml.XMLData>.NewXmlHelper();
var data = new xml.XMLData()
{
    Name = "Ly",
    Age = 18
};
var fp = "./data.xml";
xmlHelper.SetXMLData(data, fp);

生成的XML文件如下:

<?xml version="1.0" encoding="utf-8"?>
<XMLData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Name>Ly</Name>
    <Age>18</Age>
</XMLData>

3. 读取XML文件并解析数据到对象实例

var d2 = new xml.XMLData();
d2 = xmlHelper.GetXMLData(d2, fp);

Program.cs

using System;

namespace Demo
{
    public class Program
    {
        static void Main(string[] args)
        {
            var xmlHelper = xml.Maker<xml.XMLData>.NewXmlHelper();
            var data = new xml.XMLData()
            {
                Name = "Ly",
                Age = 18
            };
            var fp = "./data.xml";
            xmlHelper.SetXMLData(data, fp);
            var d2 = new xml.XMLData();
            d2 = xmlHelper.GetXMLData(d2, fp);
            Console.WriteLine($"Name:{d2.Name}  Age:{d2.Age}");
        }
    }
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值