zoukankan      html  css  js  c++  java
  • 【.NET】XML文件的创建,修改,删除

    类名:XML

    /// 1.创建XML文档
    /// 2.在根节点下增加子元素
    /// 3.在元素下增加子元素
    /// 4.获取类型为制定值的一组节点
    /// 5.抓取网页上的xml文档赋值给XmlDocument对象
    /// 6.获取服务器上指定文件的xml文件内容
    /// 7.读取xml直接返回DataSet 
    /// 8.读取Xml返回一个经排序或筛选后的DataView 
    /// 9.向Xml文件插入一行数据 
    /// 10.更行符合条件的一条Xml记录 
    /// 11.通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行 
    /// 12.删除strColumn列中值为ColumnValue的行 
    /// 13.删除所有行 
    /// 14.返回完整路径 
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml;
    using System.IO;
    using System.Data;
    using System.Data.SqlClient;
    using System.Net;
    
    namespace Tools
    {
        class XML
        {
            /// <summary>
            /// 创建XML文档
            /// </summary>
            /// <param name="name">根节点名称</param>
            /// <param name="type">根节点的一个属性值</param>
            /// <returns></returns>
            /// moss中调用方法:创建的文件如果要存到moss的文档库中,则:
            ///          XmlDocument doc = XmlOperate.CreateXmlDocument("project", "T");
            ///            在此可嵌入增加子节点方法,如AddTaskNode(taskObj, ref doc); ..
            ///          byte[] fileContent = Encoding.UTF8.GetBytes(doc.OuterXml);
            ///          folder.Files.Add("name.xml", fileContent, true);
            ///          web.Update();
            /// .net中调用方法:写入文件中,则:
            ///          document = XmlOperate.CreateXmlDocument("sex", "sexy");
            ///          document.Save("c:/bookstore.xml");         
            public static XmlDocument CreateXmlDocument(string name, string type)
            {
                XmlDocument doc = null;
                XmlElement rootEle = null;
                try
                {
                    doc = new XmlDocument();
                    doc.LoadXml("<" + name + "/>");
                    rootEle = doc.DocumentElement;
                    rootEle.SetAttribute("type", type);
                }
                catch (Exception er)
                {
                    throw er;
                }
                return doc;
            }
    
            /// <summary>
            /// 在根节点下增加子元素
            /// </summary>
            /// <param name="document"></param>
            /// <param name="nodeName"></param>
            /// <param name="type"></param>
            /// 调用方法:
            ///      document = xmloper.CreateXmlDocument("animal", "carnivore");
            ///      XmlOperate.AddNewNode1(ref document, "carnivore", "high");
            public static void AddNewNode1(ref XmlDocument document, string nodeName, string type)
            {
                XmlElement taskEle = null;
                try
                {
                    taskEle = document.CreateElement(nodeName);
                    taskEle.SetAttribute("type", type);
                    document.DocumentElement.AppendChild((XmlNode)taskEle);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            /// <summary>
            /// 在元素下增加子元素
            /// </summary>
            /// <param name="element"></param>
            /// <param name="nodeName"></param>
            /// <param name="type"></param>
            /// 调用方法:
            ///       XmlDocument document = new XmlDocument();
            ///       先取到相应的元素,然后调用该方法在该元素下增加子元素
            ///       XmlElement root = (XmlElement)document.SelectSingleNode("//animal/third");
            ///       XmlOperate.AddNewNode2(ref root,"thaw","boost investor confidence");
            ///注意上面的"//animal/third"也可换成"workflow[@type='T' and @isSpecial='1']"这种形式用来获取带有相应属性的元素
            public static void AddNewNode2(ref XmlElement element, string nodeName, string type)
            {
                XmlElement taskEle = null;
                try
                {
                    taskEle = element.OwnerDocument.CreateElement(nodeName);
                    taskEle.SetAttribute("type", type);
                    element.AppendChild((XmlNode)taskEle);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
    
            }
    
            /// <summary>
            /// 获取类型为制定值的一组节点
            /// </summary>
            /// <param name="type">类型值。E.G.workflow[@type='T' and @isSpecial='1']</param>
            /// <returns></returns>
            /// 注意:返回的 XmlNodeList 类型是个类似于arraylist的类型,所以要得到它的值只能遍历
            public static XmlNodeList GetDesiredNode(string type)
            {
                XmlDocument document = new XmlDocument();
                return document.SelectNodes("type");
            }
    
    
            /// <summary>
            /// 抓取网页上的xml文档赋值给XmlDocument对象
            /// </summary>
            /// <param name="url">网页的url(网页的内容必须是xml格式的)</param>
            /// <returns></returns>
            public static XmlDocument GetXMLDocumentFromWebPage(string url)
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
    
                myRequest.Method = "POST";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                myRequest.ContentLength = 0;
    
                // Get response 
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.Default);
                string content = reader.ReadToEnd();
    
                XmlDocument document = new XmlDocument();
                document.LoadXml(content);
                return document;
            }
    
            /// <summary>
            /// 获取服务器上指定文件的xml文件内容
            /// </summary>
            /// <param name="location"></param>
            /// <returns></returns>
            public static string GetXMLFile(string location)
            {
                XmlDocument document = new XmlDocument();
                document.Load(@"G:	tt.xml");
                return document.InnerXml;
            }
    
            //获取sharepoint中指定文件的内容
            //public string GetProjectWorkflowUrl(SPFile file)
            //{      
            //    byte[] content = file.OpenBinary();
            //    contentStr = Encoding.UTF8.GetString(content);
            //    return contentStr;       
            //}
    
            #region GetDataSetByXml
    
            /// <summary>
            /// 读取xml直接返回DataSet 
            /// </summary>
            /// <param name="strXmlPath">xml文件相对路径</param>
            /// <returns></returns>
            public static DataSet GetDataSetByXml(string strXmlPath)
            {
                try
                {
                    DataSet ds = new DataSet();
                    ds.ReadXml(GetXmlFullPath(strXmlPath));
                    if (ds.Tables.Count > 0)
                    {
                        return ds;
                    }
                    return null;
                }
                catch (Exception )
                {
                    return null;
                }
            }
            #endregion
            #region GetDataViewByXml
            /// <summary>
            /// 读取Xml返回一个经排序或筛选后的DataView 
            /// </summary>
            /// <param name="strXmlPath">xml文件相对路径</param>
            /// <param name="strWhere">筛选条件,如:"name = 'kgdiwss'"</param>
            /// <param name="strSort">排序条件,如:"Id desc"</param>
            /// <returns></returns>        
            public static DataView GetDataViewByXml(string strXmlPath, string strWhere, string strSort)
            {
                try
                {
                    DataSet ds = new DataSet();
                    ds.ReadXml(GetXmlFullPath(strXmlPath));
                    DataView dv = new DataView(ds.Tables[0]);
                    if (strSort != null)
                    {
                        dv.Sort = strSort;
                    }
                    if (strWhere != null)
                    {
                        dv.RowFilter = strWhere;
                    }
                    return dv;
                }
                catch (Exception)
                {
                    return null;
                }
            }
            #endregion
    
            #region WriteXmlByDataSet
            /// 
            /// 向Xml文件插入一行数据 
            /// 
            /// xml文件相对路径 
            /// 要插入行的列名数组,如:string[] Columns = {"name","IsMarried"}; 
            /// 要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"}; 
            /// 成功返回true,否则返回false 
            public static bool WriteXmlByDataSet(string strXmlPath, string[] Columns, string[] ColumnValue)
            {
                try
                {
                    //根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下 
                    string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd";
                    DataSet ds = new DataSet();
                    //读xml架构,关系到列的数据类型 
                    ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
                    ds.ReadXml(GetXmlFullPath(strXmlPath));
                    DataTable dt = ds.Tables[0];
                    //在原来的表格基础上创建新行 
                    DataRow newRow = dt.NewRow();
                    //循环给一行中的各个列赋值 
                    for (int i = 0; i < Columns.Length; i++)
                    {
                        newRow[Columns[i]] = ColumnValue[i];
                    }
                    dt.Rows.Add(newRow);
                    dt.AcceptChanges();
                    ds.AcceptChanges();
                    ds.WriteXml(GetXmlFullPath(strXmlPath));
                    return true;
                }
                catch (Exception)
                {
                    return false;
                }
            }
            #endregion
    
            #region UpdateXmlRow
            /// 
            /// 更行符合条件的一条Xml记录 
            /// 
            /// XML文件路径 
            /// 列名数组 
            /// 列值数组 
            /// 条件列名 
            /// 条件列值 
            /// 
            public static bool UpdateXmlRow(string strXmlPath, string[] Columns, string[] ColumnValue, string strWhereColumnName, string strWhereColumnValue)
            {
                try
                {
                    string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd";
                    DataSet ds = new DataSet();
                    //读xml架构,关系到列的数据类型 
                    ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
                    ds.ReadXml(GetXmlFullPath(strXmlPath));
                    //先判断行数 
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            //如果当前记录为符合Where条件的记录 
                            if (ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue))
                            {
                                //循环给找到行的各列赋新值 
                                for (int j = 0; j < Columns.Length; j++)
                                {
                                    ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j];
                                }
                                //更新DataSet 
                                ds.AcceptChanges();
                                //重新写入XML文件 
                                ds.WriteXml(GetXmlFullPath(strXmlPath));
                                return true;
                            }
                        }
                    }
                    return false;
                }
                catch (Exception)
                {
                    return false;
                }
            }
            #endregion
    
            #region DeleteXmlRowByIndex
            /// 
            /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行 
            /// 
            /// 
            /// 要删除的行在DataSet中的Index值 
            public static bool DeleteXmlRowByIndex(string strXmlPath, int iDeleteRow)
            {
                try
                {
                    DataSet ds = new DataSet();
                    ds.ReadXml(GetXmlFullPath(strXmlPath));
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        //删除符号条件的行 
                        ds.Tables[0].Rows[iDeleteRow].Delete();
                    }
                    ds.WriteXml(GetXmlFullPath(strXmlPath));
                    return true;
                }
                catch (Exception)
                {
                    return false;
                }
            }
            #endregion
    
            #region DeleteXmlRows
            /// 
            /// 删除strColumn列中值为ColumnValue的行 
            /// 
            /// xml相对路径 
            /// 列名 
            /// strColumn列中值为ColumnValue的行均会被删除 
            /// 
            public static bool DeleteXmlRows(string strXmlPath, string strColumn, string[] ColumnValue)
            {
                try
                {
                    DataSet ds = new DataSet();
                    ds.ReadXml(GetXmlFullPath(strXmlPath));
                    //先判断行数 
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        //判断行多还是删除的值多,多的for循环放在里面 
                        if (ColumnValue.Length > ds.Tables[0].Rows.Count)
                        {
                            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                            {
                                for (int j = 0; j < ColumnValue.Length; j++)
                                {
                                    if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
                                    {
                                        ds.Tables[0].Rows[i].Delete();
                                    }
                                }
                            }
                        }
                        else
                        {
                            for (int j = 0; j < ColumnValue.Length; j++)
                            {
                                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                                {
                                    if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
                                    {
                                        ds.Tables[0].Rows[i].Delete();
                                    }
                                }
                            }
                        }
                        ds.WriteXml(GetXmlFullPath(strXmlPath));
                    }
                    return true;
                }
                catch (Exception)
                {
                    return false;
                }
            }
            #endregion
    
            #region DeleteXmlAllRows
            /// 
            /// 删除所有行 
            /// 
            /// XML路径 
            /// 
            public static bool DeleteXmlAllRows(string strXmlPath)
            {
                try
                {
                    DataSet ds = new DataSet();
                    ds.ReadXml(GetXmlFullPath(strXmlPath));
                    //如果记录条数大于0 
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        //移除所有记录 
                        ds.Tables[0].Rows.Clear();
                    }
                    //重新写入,这时XML文件中就只剩根节点了 
                    ds.WriteXml(GetXmlFullPath(strXmlPath));
                    return true;
                }
                catch (Exception)
                {
                    return false;
                }
            }
            #endregion
    
            #region GetXmlFullPath
            /// 
            /// 返回完整路径 
            /// 
            /// Xml的路径 
            /// 
            public static string GetXmlFullPath(string strPath)
            {
                //如果路径中含有:符号,则认定为传入的是完整路径 
                if (strPath.IndexOf(":") > 0)
                {
                    return strPath;
                }
                else
                {
                    //返回完整路径 
                    return System.Web.HttpContext.Current.Server.MapPath(strPath);
                }
            }
            #endregion
    
    
        }
    }
  • 相关阅读:
    selenium浏览器操作以及对象定位
    Selenium简介以及selenium环境搭建
    JMeter测试组件
    JMeter基础:元件的顺序
    Appium
    Appium 设备操作API(根据坐标滑动)
    关于接口测试的总结
    五种方式来消除你对测试文档的仇视
    bs架构与cs架构的区别
    Eclipse的错误: 找不到或无法加载主类 10种解决大法!!!!!
  • 原文地址:https://www.cnblogs.com/chencsblog/p/3289119.html
Copyright © 2011-2022 走看看