XML(eXtensible Markup Language,可扩展标记语言)是一种通用的标记语言,主要用于存储和传输结构化数据。它的设计目标是兼具可读性和机器可处理性,广泛应用于如下场景:
数据存储与交换:不同应用程序之间数据交换。
Web服务与API通信:Web服务的标准数据格式,用于网络传输结构化信息。
系统配置参数文件:使用XML定义配置参数,因其层次结构清晰且易于解析。
文档标记:XML可用于标记文档内容,支持自定义标签描述语义。
数据库与数据序列化:XML可作为数据库导出格式或对象序列化格式。
跨平台兼容性:XML与编程语言无关,几乎所有语言(Java、Python、C#等)都提供XML解析库(如DOM、SAX)。
1、创建XML格式文件
(1)准备一个数据表:
string XMLFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XMLTest.xml");
DataTable dt = new DataTable();dt.Columns.Add("Id");dt.Columns.Add("Name");dt.Columns.Add("Code");dt.Columns.Add("YuWen");dt.Columns.Add("ShuXue");dt.Columns.Add("YingYu");dt.Columns.Add("TiYu");
for (int i = 0; i < 10; i++){ DataRow dr = dt.NewRow(); dr["Id"] = i; dr["Name"] = "Name" + i.ToString(); dr["Code"] = "Code" + i.ToString(); dr["YuWen"] = 100 + i; dr["ShuXue"] = 200 + i; dr["YingYu"] = 300 + i; dr["TiYu"] = 400 + i; dt.Rows.Add(dr);}
(2)将数据表转换为A格式:
bool RetState = XmlFileHelper.Handle.DataTableToXMLA(dt, XMLFilePath);
(3)将数据表转换为B格式:
RetState = XmlFileHelper.Handle.DataTableToXMLB(dt, XMLFilePath);
(4)XML格式转换帮助类:
public class XmlFileHelper{ private static XmlFileHelper handle = null; public static XmlFileHelper Handle { get { if (handle == null) { handle = new XmlFileHelper(); } return handle; } }
#region 内置函数,通用DataTable与XML文件相互转换
#region DataTable转换为XML文件 格式A public bool DataTableToXMLA(DataTable data, string SaveXMLFilePath) { bool RetState = false; DataSet ds = new DataSet(); ds.Tables.Add(data.Copy());
try { using (MemoryStream stream = new MemoryStream()) { using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8)) { ds.WriteXml(writer, XmlWriteMode.WriteSchema); int nCount = (int)stream.Length; byte[] arr = new byte[nCount]; stream.Seek(0, SeekOrigin.Begin); stream.Read(arr, 0, nCount); UTF8Encoding utf = new UTF8Encoding(); string strContent = utf.GetString(arr).Trim(); using (StreamWriter sw = new StreamWriter(SaveXMLFilePath)) { string NewStr = strContent; NewStr = NewStr.Replace("><xs", ">\r\n<xs").Replace("></xs", ">\r\n</xs").Replace("schema><Table1", "schema>\r\n<Table1").Replace("Table1><Table1", "Table1>\r\n<Table1").Replace("></NewDataSet", ">\r\n</NewDataSet"); sw.WriteLine(NewStr); sw.Close(); writer.Close(); } } } RetState = true; } catch (System.Exception ex) { RetState = false; throw new Exception(ex.Message); } return RetState; } #endregion
#region DataTable转换为XML文件 格式B public bool DataTableToXMLB(DataTable dt, string xmlFilePath) { bool RetState = false; try { XElement xAld = new XElement("DataTable", new XAttribute("Count", dt.Rows.Count)); for (int i = 0; i < dt.Rows.Count; i++) { XElement xProduct = new XElement("Row", new XAttribute("Index", (i + 1).ToString()));
for (int j = 0; j < dt.Columns.Count; j++) { xProduct.Add(new XElement(dt.Columns[j].ColumnName, dt.Rows[i][j].ToString())); } xAld.Add(xProduct); }
xAld.Save(xmlFilePath); } catch (Exception) { RetState = false; } return RetState; } #endregion
#region XML文件转换为DataTable public DataTable XMLToDataTable(string XMLFilePath) { DataTable ReData = new DataTable(); DataSet ds = new DataSet(); try { if (!File.Exists(XMLFilePath)) return new DataTable();
using (StreamReader sr = new StreamReader(XMLFilePath)) { string strXmlContent = sr.ReadToEnd(); using (StringReader stream = new StringReader(strXmlContent)) { using (XmlTextReader reader = new XmlTextReader(stream)) { ds.ReadXml(reader); reader.Close(); stream.Close(); sr.Close(); } } } if (ds.Tables.Count > 1) ReData = ds.Tables[1]; else ReData = ds.Tables[0]; } catch (System.Exception vErr) { ReData = new DataTable(); throw new Exception(vErr.Message); } return ReData; } #endregion
#endregion }
新款S119无人机GPS定位返航带屏高级航拍四轴飞行器8k长续航
青少年160Pro-多功能编程无人机C类科教馆竞赛教具用无人机飞行器
BC230竞赛编程无人机青少年教学编程无人机C类科教馆竞赛类教具1
无人机编程入门
(1)自定义格式(主表与子表嵌套格式),内容列属性描述根据需求调整;private static void CreateUserXmlFile(string xmlFilePath){
XElement xAld = new XElement("大标题", new XAttribute("version", "1.0"));
XElement xProduct = new XElement("主表标题", new XAttribute("主表标识名称", "主表标识名称值"), new XElement("列名1", "值1"), new XElement("列名2", "值2"), new XElement("子表行数", "10"), new XElement("列名N", "值N") ); xAld.Add(xProduct);
for (int i = 0; i < 10; i++) { XElement xVersion = new XElement("子表标题", new XAttribute("Index", (i + 1).ToString()), new XElement("列名1", "值1"), new XElement("列名2", "值2"), new XElement("列名N", "值N") ); xAld.Add(xVersion); }
xAld.Save(xmlFilePath);}

XElement xe = XElement.Load(xmlFilePath);var Product = (from ele in xe.Elements("主表标题") select ele).SingleOrDefault();if (xProduct != null){ int Count = int.Parse(xProduct.Element("子表行数").Value); for (int i = 1; i <= Count; i++) { var xVersion = (from ele in xe.Elements("子表标题") where ele.Attribute("Index").Value.Equals(i.ToString()) select ele).SingleOrDefault(); if (xVersion != null) { string v1 = xVersion.Element("列名1").Value.Trim().ToUpper(); string v2 = xVersion.Element("列名2").Value.Trim().ToUpper(); string vN = xVersion.Element("列名N").Value.Trim().ToUpper(); } }}
阅读原文:原文链接
该文章在 2025/7/21 10:30:02 编辑过