C# 读写XML文件

C#写XML文件

C#如何创建一个新的XML把代码中的数据写到XML中,

要求:不光要写元素内容,还有有属性的值。示例:

<?xml version="1.0"?>
<Product xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name Color="qwe">
    <nameID>asdfg</nameID>
  </Name>
  <Age>18</Age>
</Product>

第一步创建一个类结构和XML相似的;

    [XmlRoot]
    public class Product
    {
        [XmlElement("Name")]
        public SSA Name { get; set; }
        [XmlElement("Age")]
        public int Age { get; set; }
    }
    public class SSA
    {
        [XmlAttribute(AttributeName = "Color")]
        public string Color { get; set; }
        [XmlElement("nameID")]
        public string nameID { get; set; }
    }

其中    [XmlRoot]  [XmlElement]和 [XmlAttribute(AttributeName = "Color")]这种东西叫注解,是C#语法的一种。这里的意思分别为指定序列化为根元素,指定序列化为元素,指定序列化为特性(属性)。

其中XML中的属性定义就是通过[XmlAttribute(AttributeName = "Color")]来声明的,Color属性在SSA类下就是SSA的属性,而SSA的变量名是Name,所以Color属性就在Name的元素中。

还有一个需要注意的就是

XML中元素的ID就是类中的变量名,比如在XML中Name属性名就是C#中 public SSA Name { get; set; }的名。

        public void WriteMachineXML()
        {
            Product pro = new Product();
            SSA n = new SSA();            
            pro.Age = 18;
            n.nameID = "asdfg";
            n.Color = "qwe";
            pro.Name = n;
            using (FileStream file = File.Create("aaa.xml"))
            {
                XmlSerializer xml = new XmlSerializer(typeof(Product));
                xml.Serialize(file, pro);
            }
        }

这个函数就是填充XML的内容的,

FileStream file = File.Create("aaa.xml")

这段代码就是创建一个aaa的xm文件,

XmlSerializer xml = new XmlSerializer(typeof(Product));
xml.Serialize(file, pro);

这两行代码就是把深数据写入XML文件。

 

运行这个函数就可以得到刚开始的时候看到的XML文件中的内容。

 

C#读XML文件

实验步骤1,第一步先写XML文件,然后在读写的XML文件,然后再把读到的文件写到另外一个xml文件中。

第一步读XML文件

        public static void readXml()
        {
            var axc = XmlObj.Load<Product>("aaa.xml");

            using (FileStream file = File.Create("bbb.xml"))
            {
                XmlSerializer xml = new XmlSerializer(typeof(Product));
                xml.Serialize(file, axc);
            }
        }
    [Serializable]
    public class XmlObj
    {
        public static obj_type Load<obj_type>(string path)
        {
            var data = "";
            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            using (var sr = new StreamReader(fs, Encoding.UTF8))
            {
                data =  sr.ReadToEnd();
            }
            using (var reader = new StringReader(data))
            {
                var serializer = new XmlSerializer(typeof(obj_type));
                var obj = serializer.Deserialize(reader);
                return (obj_type)obj;
            }
        }
    }

这一段就是读文件的代码。

精简版的代码,不建议这么搞,自己玩玩就行了,要是写成这样会被读代码的人打死的。

    [Serializable]
    public class XmlObj
    {
        public static obj_type Load<obj_type>(string path)
        {
            return (obj_type)new XmlSerializer(typeof(obj_type)).Deserialize(new StringReader(new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read), Encoding.UTF8).ReadToEnd()));
        }
    }

 

全部代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace ConsoleApplication8
{
    [Serializable]
    public class XmlObj
    {
        public static obj_type Load<obj_type>(string path)
        {
            var data = "";
            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            using (var sr = new StreamReader(fs, Encoding.UTF8))
            {
                data =  sr.ReadToEnd();
            }
            using (var reader = new StringReader(data))
            {
                var serializer = new XmlSerializer(typeof(obj_type));
                var obj = serializer.Deserialize(reader);
                return (obj_type)obj;
            }
        }
    }
    [XmlRoot]
    public class Product
    {
        [XmlElement("Name")]
        public SSA Name { get; set; }
        [XmlElement("Age")]
        public int Age { get; set; }
    }
    public class SSA
    {
        [XmlAttribute(AttributeName = "Color")]
        public string Color { get; set; }
        [XmlElement("nameID")]
        public string nameID { get; set; }
    }
    class Program
    {
        public static void WriteMachineXML()
        {
            Product pro = new Product();
            SSA n = new SSA();
            pro.Age = 18;
            n.nameID = "asdfg";
            n.Color = "qwe";
            pro.Name = n;
            using (FileStream file = File.Create("aaa.xml"))
            {
                XmlSerializer xml = new XmlSerializer(typeof(Product));
                xml.Serialize(file, pro);
            }
        }
        public static void readXml()
        {
            var axc = XmlObj.Load<Product>("aaa.xml");

            using (FileStream file = File.Create("bbb.xml"))
            {
                XmlSerializer xml = new XmlSerializer(typeof(Product));
                xml.Serialize(file, axc);
            }
        }
        static void Main(string[] args)
        {
            WriteMachineXML();
            readXml();
        }
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值