• xml使用系统整理


    1、 认识xml

    可扩展标记语言,一种用于标记电子文档使其具有结果性的标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

    2、 和超文本标记语言区别

    2.1 html不一定需要成对出现,xml则一定需要成对出现。

    2.2 html 不区分大小写,但是xml区分。

    3、对xml文档增删改查

    复制代码
     1  //声明一个XmlDocument空对象
     2         protected XmlDocument XmlDoc = new XmlDocument();
     3         /// <summary>
     4         /// 构造函数,导入xml文件
     5         /// </summary>
     6         /// <param name="path"></param>
     7         public XmlHelper(string path)
     8         {
     9             try
    10             {
    11                 XmlDoc.Load(path);
    12             }
    13             catch (Exception ex)
    14             {
    15                 throw ex;
    16             }
    17         }
    18         /// <summary>
    19         /// 保存文件
    20         /// </summary>
    21         /// <param name="path"></param>
    22         public void SaveXml(string path)
    23         {
    24             try
    25             {
    26                 XmlDoc.Save(path);
    27             }
    28             catch (System.Exception ex)
    29             {
    30                 throw ex;
    31             }
    32         }
    复制代码
    复制代码
     1  /// <summary>
     2         /// 获取节点的子节点的内容
     3         /// </summary>
     4         /// <param name="path"></param>
     5         /// <param name="rootNode"></param>
     6         /// <param name="attributeName"></param>
     7         /// <returns></returns>
     8         public string GetNodeChildAttribute(string path, string rootNode, string attributeName)
     9         {
    10             XmlNode xn = XmlDoc.SelectSingleNode(rootNode);
    11             StringBuilder sb = new StringBuilder();
    12             XmlNodeList xnl = xn.ChildNodes;
    13 
    14             foreach (XmlNode xnf in xnl)
    15             {
    16                 XmlElement xe = (XmlElement)xnf;
    17                 XmlNodeList xnf1 = xe.ChildNodes;
    18                 foreach (XmlNode xn2 in xnf1)
    19                 {
    20                     if (xn2.Name == attributeName)
    21                     {
    22                         sb.Append(xn2.InnerText);//显示子节点点文本
    23                     }
    24                 }
    25             }
    26             return sb.ToString();
    27         }
    复制代码
    复制代码
     1 /// <summary>
     2         /// 获取节点的属性值
     3         /// </summary>
     4         /// <param name="path">xml路径</param>
     5         /// <param name="rootNode">根节点名称</param>
     6         /// <param name="attributeName">属性名称</param>
     7         /// <returns></returns>
     8         public string GetNodeAttribute(string path, string rootNode, string attributeName)
     9         {
    10             try
    11             {
    12                 XmlNode xn = XmlDoc.SelectSingleNode(rootNode);
    13                 XmlNodeList xnl = xn.ChildNodes;
    14                 StringBuilder sb = new StringBuilder();
    15                 foreach (XmlNode xnf in xnl)
    16                 {
    17                     XmlElement xe = (XmlElement)xnf;
    18                     sb.Append(xe.GetAttribute(attributeName));
    19                 }
    20                 return sb.ToString();
    21             }
    22             catch (Exception)
    23             {
    24 
    25                 throw;
    26             }
    27         }
    复制代码
    复制代码
     1  /// <summary>
     2         /// 删除节点/节点属性
     3         /// </summary>
     4         /// <param name="path">xml文件地址</param>
     5         /// <param name="rootNode">根节点名称</param>
     6         /// <param name="delNode">要删除的节点</param>
     7         /// <param name="attributeName">节点属性</param>
     8         /// <param name="attributeValue">属性值</param>
     9         public void DeleteNode(string path, string rootNode, string attributeName, string attributeValue)
    10         {
    11             try
    12             {
    13                 XmlNodeList xnl = XmlDoc.SelectSingleNode(rootNode).ChildNodes;
    14                 foreach (XmlNode xn in xnl)
    15                 {
    16                     XmlElement xe = (XmlElement)xn;
    17                     if (xe.GetAttribute(attributeName) == attributeValue)
    18                     {
    19                         //xe.RemoveAttribute(attributeName);//删除属性
    20                         xe.RemoveAll();//删除该节点的全部内容
    21                     }
    22                 }
    23                 SaveXml(path);
    24             }
    25             catch (Exception)
    26             {
    27 
    28                 throw;
    29             }
    30         }
    复制代码
    复制代码
     1  /// <summary>
     2         /// 修改节点的子节点内容
     3         /// </summary>
     4         /// <param name="path">xml文件路径</param>
     5         /// <param name="rootNode">根节点名称</param>
     6         /// <param name="attributeName">节点的子节点名称</param>
     7         /// <param name="attributeOldValue">节点的子节点原始内容</param>
     8         /// <param name="attributeNewValue">节点的子节点新内容</param>
     9         public void UpdateChildNodeAttribute(string path, string rootNode, string attributeName, string attributeOldValue, string attributeNewValue)
    10         {
    11             try
    12             {
    13                 XmlNodeList nodeList = XmlDoc.SelectSingleNode(rootNode).ChildNodes;//获取根节点的所有子节点
    14                 foreach (XmlNode xn in nodeList)//遍历所有子节点
    15                 {
    16                     XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
    17                     if (string.IsNullOrEmpty(attributeName) || string.IsNullOrEmpty(attributeOldValue))
    18                     {
    19                         return;
    20                     }
    21                     else
    22                     {
    23                         XmlNodeList nls = xe.ChildNodes;
    24                         if (nls != null && nls.Count > 0)
    25                         {
    26                             foreach (XmlNode xn1 in nls)//遍历
    27                             {
    28                                 XmlElement xe2 = (XmlElement)xn1;//转换类型
    29                                 if (xe2.InnerText == attributeOldValue)//如果找到
    30                                 {
    31                                     xe2.InnerText = attributeNewValue;//则修改
    32                                     break;//找到退出来就可以了
    33                                 }
    34                             }
    35                         }
    36                     }
    37                 }
    38                 SaveXml(path);
    39             }
    40             catch (Exception)
    41             {
    42 
    43                 throw;
    44             }
    45         }
    复制代码
    复制代码
     1 /// <summary>
     2         /// 修改节点属性值操作
     3         /// </summary>
     4         /// <param name="path">xml文件路径</param>
     5         /// <param name="rootNode">根节点名称,如:bookstore</param>
     6         /// <param name="attributeName">节点属性名</param>
     7         /// <param name="attributeOldValue">节点属性原来值</param>
     8         /// <param name="attributeNewValue">节点属性修改后的值</param>
     9         public void UpdateNodeAttribute(string path, string rootNode, string attributeName, string attributeOldValue, string attributeNewValue)
    10         {
    11             try
    12             {
    13                 XmlNodeList nodeList = XmlDoc.SelectSingleNode(rootNode).ChildNodes;//获取根节点的所有子节点
    14                 foreach (XmlNode xn in nodeList)//遍历所有子节点
    15                 {
    16                     XmlElement xe = (XmlElement)xn;//将子节点类型专程xmlelement类型
    17                     if (string.IsNullOrEmpty(attributeName) || string.IsNullOrEmpty(attributeOldValue))
    18                     {
    19                         return;
    20                     }
    21                     else
    22                     {
    23                         if (xe.GetAttribute(attributeName) == attributeOldValue)
    24                         {
    25                             xe.SetAttribute(attributeName, attributeNewValue);
    26                         }
    27                     }
    28                 }
    29                 SaveXml(path);
    30             }
    31             catch (Exception)
    32             {
    33 
    34                 throw;
    35             }
    36         }
    复制代码
    复制代码
     1 /// <summary>
     2         /// 插入节点操作
     3         /// </summary>
     4         /// <param name="path">xml文件路径</param>
     5         /// <param name="rootNode">根节点名称,如:bookstore</param>
     6         /// <param name="node">节点名称,如:book</param>
     7         /// <param name="nodeAttributes">节点的属性-属性值集合</param>
     8         /// <param name="childAttributes">节点子节点名称-内容</param>
     9         public void InsertNode(string path, string rootNode, string node, Dictionary<string, string> nodeAttributes, Dictionary<string, string> childAttributes)
    10         {
    11             try
    12             {
    13                 XmlNode root = XmlDoc.SelectSingleNode(rootNode);//找到根节点bookstore
    14                 XmlElement xe1 = XmlDoc.CreateElement(node);//创建子节点book
    15                 if (nodeAttributes != null && nodeAttributes.Count > 0)
    16                 {
    17                     foreach (var n in nodeAttributes)
    18                     {
    19                         xe1.SetAttribute(n.Key, n.Value);
    20                     }
    21                 }
    22                 if (childAttributes != null && childAttributes.Count > 0)
    23                 {
    24                     XmlElement xesub1;
    25                     foreach (var n in childAttributes)
    26                     {
    27                         xesub1 = XmlDoc.CreateElement(n.Key);
    28                         xesub1.InnerText = n.Value;
    29                         xe1.AppendChild(xesub1);//添加到<book>节点中
    30                     }
    31                 }
    32                 root.AppendChild(xe1);
    33                 SaveXml(path);
    34             }
    35             catch (Exception)
    36             {
    37 
    38                 throw;
    39             }
    40         }
    复制代码

    调用:

    复制代码
     1  string path = Server.MapPath("Books.xml");
     2             XmlHelper xHelper = new XmlHelper(path);
     3             /*插入*/
     4             //Dictionary<string, string> dc1 = new Dictionary<string, string>();
     5             //dc1.Add("genre", "李赞红");
     6             //dc1.Add("ISBN", "2-3631-4");
     7             //Dictionary<strin插入g, string> dc2 = new Dictionary<string, string>();
     8             //dc2.Add("title", "CS从入门到精通");
     9             //dc2.Add("author", "候捷");
    10             //dc2.Add("price", "58.3");
    11             //xHelper.InsertNode(path, "bookstore", "book", dc1, dc2);
    12 
    13             /*修改*/
    14             //xHelper.UpdateNodeAttribute(path, "bookstore", "genre", "李赞红", "李");
    15             //xHelper.UpdateChildNodeAttribute(path, "bookstore", "title", "CS从入门到精通", "cs");
    16 
    17             /*删除节点*/
    18             //xHelper.DeleteNode(path, "bookstore", "genre", "李");
    19 
    20             //Response.Write(xHelper.GetNodeAttribute(path, "bookstore", "genre"));
    21             //Response.Write(xHelper.GetNodeChildAttribute(path, "bookstore", "price"));
    复制代码

    4、通过xml数据绑定

    xml转DataTable

    复制代码
    
    
    复制代码
     1  public DataTable XmlToData(string path, string rootNode, params string[] columns)
     2         {
     3             DataTable dt = new DataTable();
     4             XmlNodeList xn = XmlDoc.SelectSingleNode(rootNode).ChildNodes;
     5             try
     6             {
     7                 if (columns.Length > 0)
     8                 {
     9                     DataColumn dc;
    10                     for (int i = 0; i < columns.Length; i++)
    11                     {
    12                         dc = new DataColumn(columns[i]);
    13                         dt.Columns.Add(dc);
    14                     }
    15                     foreach (XmlNode xnf in xn)
    16                     {
    17                         XmlElement xe = (XmlElement)xnf;
    18                         XmlNodeList xnf1 = xe.ChildNodes;
    19                         int i = 0;
    20                         DataRow dr = dt.NewRow();
    21                         foreach (XmlNode xn2 in xnf1)
    22                         {
    23                             dr[i] = xn2.InnerText;
    24                             i++;
    25                         }
    26                         dt.Rows.Add(dr);
    27                     }
    28                 }
    29             }
    30             catch (Exception)
    31             {
    32 
    33                 throw;
    34             }
    35             return dt;
    36 
    37         }
    复制代码
    
    
    复制代码

    调用:

    1  //string[] arr = { "title", "author", "price" };
    2             //GridView1.DataSource = xHelper.XmlToData(path, "bookstore", arr);
    3             //GridView1.DataBind();

    DataTable转xml

    复制代码
     1  /*datatable转xml*/
     2         public  string DataTableToXml(DataTable dt)
     3         {
     4             if (dt != null)
     5             {
     6                 MemoryStream ms = null;
     7                 XmlTextWriter XmlWt = null;
     8                 try
     9                 {
    10                     ms = new MemoryStream();
    11                     //根据ms实例化XmlWt
    12                     XmlWt = new XmlTextWriter(ms, Encoding.Unicode);
    13                     //获取ds中的数据
    14                     dt.WriteXml(XmlWt);
    15                     int count = (int)ms.Length;
    16                     byte[] temp = new byte[count];
    17                     ms.Seek(0, SeekOrigin.Begin);
    18                     ms.Read(temp, 0, count);
    19                     //返回Unicode编码的文本
    20                     UnicodeEncoding ucode = new UnicodeEncoding();
    21                     string returnValue = ucode.GetString(temp).Trim();
    22                     return returnValue;
    23                 }
    24                 catch (System.Exception ex)
    25                 {
    26                     throw ex;
    27                 }
    28                 finally
    29                 {
    30                     //释放资源
    31                     if (XmlWt != null)
    32                     {
    33                         XmlWt.Close();
    34                         ms.Close();
    35                         ms.Dispose();
    36                     }
    37                 }
    38             }
    39             else
    40             {
    41                 return "";
    42             }
    43         }
    复制代码

    调用:

    1  //bool s = xHelper.CDataToXmlFile(xHelper.XmlToData(path, "bookstore", arr), "Bookss.xml","book");

    5、xml序列化反序列化

    1  [Serializable]
    2     public class Person
    3     {
    4         public string Name { get; set; }
    5         public int Age { get; set; }
    6     }
    复制代码
     1 public class CXmlSerializer<T> where T : new()
     2     {
     3         private static XmlSerializer _Serializer = new XmlSerializer(typeof(T));
     4 
     5         public static string Serialize(T t)
     6         {
     7             string s = "";
     8             using (MemoryStream ms = new MemoryStream())
     9             {
    10                 _Serializer.Serialize(ms, t);
    11                 s = System.Text.UTF8Encoding.UTF8.GetString(ms.ToArray());
    12             }
    13             return s;
    14         }
    15 
    16         public static T Deserialize(string s)
    17         {
    18             T t;
    19             using (MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(s)))
    20             {
    21                 t = (T)_Serializer.Deserialize(ms);
    22             }
    23             return t;
    24         }
    25     }
    复制代码

    调用:

    1 List<Person> list = new List<Person> { new Person { Name = "Xuj", Age = 20 }, new Person { Name = "duj", Age = 20 }, new Person { Name = "fuj", Age = 20 } };
    2             string s = CXmlSerializer<List<Person>>.Serialize(list);
  • 相关阅读:
    收银钱箱弹出设置
    IOS4.0 实例练习时钟
    mysql 日期查询操作 copy
    ios 学习笔记 2
    SVN 不能移动 xx\entries 到 xx\entries
    做一个基于PHPCMS V9架构的商城
    基于JDBC API 的事务管理代码示例
    mysql 数据类型
    Discuz!NT CreditsOperationType
    spring 事务传播行为
  • 原文地址:https://www.cnblogs.com/ysz12300/p/5294639.html
Copyright © 2020-2023  润新知