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();
}
}
}