C#读写XML类

#region Using directives
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
//
using System.Xml;


//using System;
//using System.Data;            // Use ADO.NET namespace
using System.Data.SqlClient;  // Use SQL Server data provider namespace
using System.Collections.Specialized;
using System.Text;

#endregion
namespace  CNEE.IF.VCY
{
 /// <summary>
 /// xml文件(节点)操作类
 /// </summary>
 public class cXML
 {
  #region 变量
  
  


  #region 参考  
  static public void cMain(string[] args)
  {
   SqlConnection thisConnection = new SqlConnection(@"server=dcwl;integrated security=true;"+"database=cjgl");
   DataSet thisDataSet = new DataSet();
   //////////////////////////////////////////////////////
   //SqlDataAdapter thisADapter = new SqlDataAdapter("select stuid,name from student",thisConnection);
   //SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisADapter);

          
   SqlDataAdapter custAdapter = new SqlDataAdapter("select * from student",thisConnection);
   SqlDataAdapter orderAdapter = new SqlDataAdapter("select * from cji",thisConnection);
   ////////填充到内存的student和cji表中
   custAdapter.Fill(thisDataSet,"student");
   orderAdapter.Fill(thisDataSet,"cji");
   // SqlDataAdapter detailAdapter = new SqlDataAdapter("select *from [chaxun]",thisConnection);
   DataRelation custOrderRel = thisDataSet.Relations.Add("cjdan",thisDataSet.Tables["student"].Columns["stuid"],thisDataSet.Tables["cji"].Columns["stuid"]);
   /////////////////////////////////// //内存表
   foreach(DataRow custRow in thisDataSet.Tables["student"].Rows)
   {
    Console.WriteLine("student ID:"+custRow["stuid"]+"name:"+custRow["name"]);
    foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel))
    {
     Console.WriteLine("成绩:"+"数学"+orderRow["marth"]+"外语:"+orderRow["English"]+"语文:"+orderRow["china"]);
    }
   }

   custOrderRel.Nested = true;
   thisDataSet.WriteXml(@"c:/xml.xml");//写入到xml文件
   ////////////////////
   DataSet thatDataSet = new DataSet();
   thatDataSet.ReadXml(@"xml.xml");//从XML文件中读出
   foreach (DataRow custRow in thatDataSet.Tables["student"].Rows)
   {
    Console.WriteLine("stuid:"+custRow["stuid"]+"name:"+custRow["name"]);
   }
   Console.WriteLine("创建DataSet的表是:{0}",thatDataSet.Tables[0].TableName);
   //Console.ReadKey();
   //////////////////////////////////////////////////////

  }
 

 //////////////////////////////////////////////访问多个表

 


   static public void dMain(string[] args)
   {
    // Specify SQL Server-specific connection string

    SqlConnection thisConnection = new SqlConnection(
     @"Server=(local)/sqlexpress;Integrated Security=True;" +
     "Database=northwind");

    DataSet thisDataSet = new DataSet();
    SqlDataAdapter custAdapter = new SqlDataAdapter(
     "SELECT * FROM Customers", thisConnection);
    custAdapter.Fill(thisDataSet, "Customers");

    SqlDataAdapter orderAdapter = new SqlDataAdapter(
     "SELECT * FROM Orders", thisConnection);
    orderAdapter.Fill(thisDataSet, "Orders");

    SqlDataAdapter detailAdapter = new SqlDataAdapter(
     "SELECT * FROM [Order Details]", thisConnection);
    detailAdapter.Fill(thisDataSet, "Order Details");

    SqlDataAdapter prodAdapter = new SqlDataAdapter(
     "SELECT * FROM Products", thisConnection);
    prodAdapter.Fill(thisDataSet, "Products");

    DataRelation custOrderRel = thisDataSet.Relations.Add("CustOrders",
     thisDataSet.Tables["Customers"].Columns["CustomerID"],
     thisDataSet.Tables["Orders"].Columns["CustomerID"]);

    DataRelation orderDetailRel = thisDataSet.Relations.Add("OrderDetail",
     thisDataSet.Tables["Orders"].Columns["OrderID"],
     thisDataSet.Tables["Order Details"].Columns["OrderID"]);

    DataRelation orderProductRel = thisDataSet.Relations.Add(
     "OrderProducts", thisDataSet.Tables["Products"].Columns["ProductID"],
     thisDataSet.Tables["Order Details"].Columns["ProductID"]);

    foreach (DataRow custRow in thisDataSet.Tables["Customers"].Rows)
    {
     Console.WriteLine("Customer ID: " + custRow["CustomerID"]);

     foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel))
     {
      Console.WriteLine("/tOrder ID: " + orderRow["OrderID"]);
      Console.WriteLine("/t/tOrder Date: " + orderRow["OrderDate"]);

      foreach (DataRow detailRow in
       orderRow.GetChildRows(orderDetailRel))
      {
       Console.WriteLine("/t/tProduct: " +
        detailRow.GetParentRow(orderProductRel)["ProductName"]);
       Console.WriteLine("/t/tQuantity: " + detailRow["Quantity"]);
      }
     }
    }
    thisConnection.Close();
    Console.Write("Program finished, press Enter/Return to continue:");
    Console.ReadLine();

  }
  #endregion
  #endregion
  
  public cXML()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  private XmlDocument xmlDoc;
  private string msg;
  #region 创建XML文件
  /// <summary>
  /// 创建一个XML文件
  /// </summary>
  /// <param name="path">XML路径</param>
  ///
  public void CreateXML(string path)
  {
          
   if (!System.IO.File.Exists(path))
   {
    XmlTextWriter writer = new XmlTextWriter(path, null);
    writer.Formatting = Formatting.Indented; //缩进格式
    writer.Indentation = 4;
    writer.WriteStartDocument();
            
    writer.Flush();
    writer.Close();
   }
  }
  /// <summary>
  /// 利用这个可以获得一个连接数据库数组[6],打开Bll.xml用
  /// 得到配置文件连接数据库字符串
  /// </summary>
  /// <param name="path"></param>
  /// <param name="s"></param>
  public static void ReadBll_SqlCon(string path ,ref string[] strCon)
  {
   if(strCon==null)
    strCon=new string[6];
   System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
   xmldoc.Load(path);
   System.Xml.XmlNodeReader xmlnoderd=new System.Xml.XmlNodeReader(xmldoc);
   string s = "";
   int i=0;
   while (xmlnoderd.Read())
   {
    switch (xmlnoderd.NodeType)
    {
     case System.Xml.XmlNodeType.Element:
        break;
     case System.Xml.XmlNodeType.Text:
      if (s.Equals("Name"))
      {
      }
      else
      {
       s = xmlnoderd.Value;
       System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(s); 
       strCon[i]=s;
       i++;
      }
      break;
    }
   }
  }
  /// <summary>
  ///
  /// </summary>
  /// <param name="path"></param>
  /// <param name="TreeView1"></param>
  public static  void ReadXmlData(string path,ref System.Windows.Forms.TreeView TreeView1)
  {
   if(TreeView1==null)
   TreeView1=new System.Windows.Forms.TreeView();
   System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
   xmldoc.Load(path);
   System.Xml.XmlNodeReader xmlnoderd=new System.Xml.XmlNodeReader(xmldoc);
   string s = "";
   while (xmlnoderd.Read())
   {
    switch (xmlnoderd.NodeType)
    {
     case System.Xml.XmlNodeType.Element:
     {
      //s = "<"+System.Xml.XmlNodeType.Text.ToString()+">"+xmlnoderd.Value+"</"+System.Xml.XmlNodeType.Text.ToString()+">";
      //System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(System.Xml.XmlNodeType.Element.ToString());
      //TreeView1.Nodes.Add(node);
     }
      break;
     case System.Xml.XmlNodeType.Text:
      if (s.Equals("Name"))
      {
       //s = "<"+xmlnoderd.Value+">";
       //System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(s);
       //TreeView1.Nodes.Add(node);
      }
      else
      {
       s = xmlnoderd.Value;
       System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(s); 
       TreeView1.Nodes.Add(s);
      }
      break;
    }
   }
  }
  /// <summary>
  /// 创建一个XML文件
  /// </summary>
  /// <param name="path">XML路径</param>
  /// <param name="Node">XML根结名</param>
  public void CreateXML(string path, string rootNode)
  {
   if (!System.IO.File.Exists(path))
   {
    XmlTextWriter writer = new XmlTextWriter(path, null);
    writer.Formatting = Formatting.Indented; //缩进格式
    writer.Indentation = 4;
    writer.WriteStartDocument();
    if (rootNode != "")
    {
     writer.WriteStartElement(rootNode, null);
     writer.WriteEndElement();
    }
    writer.Flush();
    writer.Close();
   }
  }
  #endregion
  #region 为XML文件创建一级或二级节点

  /// <summary>
  /// 在根一级增加一级XML节点
  /// </summary>
  /// <param name="xmldoc">XmlDocument,已经装载XML</param>
  /// <param name="rootNode">根节点名称</param>
  /// <param name="createNode">新产生的节点名称</param>
  /// <param name="attribute">新产生的节点属性</param>
  /// <returns></returns>
  public XmlDocument AddOneXML(XmlDocument xmldoc, string rootNode, string createNode, string[,] attribute)
  {
   if (xmldoc != null && createNode!="")
   {
    XmlNode xmlnode = xmldoc.SelectSingleNode(rootNode);
    XmlElement xe = xmldoc.CreateElement(createNode);
    if (attribute != null)
    {
     int length = attribute.Length;
     if (length > 0)
     {
      xe.SetAttribute("key", Guid.NewGuid().ToString());
      for (int i = 0; i < length; i++)
      {
       xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
      }
     }
    }
    xmlnode.AppendChild(xe);
   }
   return xmldoc;
  }
  /// <summary>
  /// 在根一级增加一级XML节点
  /// </summary>
  /// <param name="path">路径</param>
  /// <param name="rootNode">根节点名称</param>
  /// <param name="createNode">新产生的节点名称</param>
  /// <param name="attribute">新产生的节点属性</param>
  public void AddOneXML(string path, string rootNode, string createNode, string[,] attribute,out string msg)
  {
   msg = "";
   if (System.IO.File.Exists(path))
   {
    xmlDoc = new XmlDocument();
    xmlDoc.Load(path);
    XmlNode xmlnode = xmlDoc.SelectSingleNode(rootNode);
    XmlElement xe = xmlDoc.CreateElement(createNode);
    if (attribute != null)
    {
     int length = attribute.Length / 2;
     if (length > 0)
     {
      xe.SetAttribute("key", Guid.NewGuid().ToString());
      for (int i = 0; i < length; i++)
      {
       xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
      }
     }
    }
    xmlnode.AppendChild(xe);
    xmlDoc.Save(path);
   }
   else
   {
    msg = "error path;Please check your path";
   }
  }
  /// <summary>
  /// 建立有二级节点的XML
  /// </summary>
  /// <param name="xmldoc">XmlDocument对象,装载了XML</param>
  /// <param name="rootNode">根节点名称</param>
  /// <param name="createNode">新产生节点名称</param>
  /// <param name="attribute">新产生节点属性</param>
  /// <param name="strparent">新产生节点子节点参数</param>
  /// <returns></returns>
  public XmlDocument AddTwoXML(XmlDocument xmldoc, string rootNode, string createNode, string[,] attribute, string[,] strparent)
  {
           
   if (xmldoc != null && createNode != "")
   {
    XmlNode xmlnode =  xmldoc.SelectSingleNode(rootNode);
    XmlElement xe = xmldoc.CreateElement(createNode);
          
    if (attribute != null)
    {
     int length = attribute.Length / 2;
     if (length > 0)
     {
      xe.SetAttribute("key", Guid.NewGuid().ToString());
      for (int i = 0; i < length; i++)
      {
       xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
      }
     }
     if (strparent != null && createNode != "")
     {
      // XmlNode parantNode =  xe.SelectSingleNode(createNode);
      int parantLength = strparent.Length / 2;
      for (int i = 0; i < parantLength; i++)
      {
                        
       XmlElement parantXe = xmldoc.CreateElement(strparent[0, i].ToString());
       parantXe.InnerText = strparent[1, i].ToString();
       xe.AppendChild(parantXe);
      }
                      

     }
                 
    }
    xmlnode.AppendChild(xe);
   }
   return xmldoc;
  }
  /// <summary>
  /// 建立有二级节点的XML
  /// </summary>
  /// <param name="path">路径</param>
  /// <param name="rootNode">根节点</param>
  /// <param name="createNode">新产生节点名称</param>
  /// <param name="attribute">新产生节点属性</param>
  /// <param name="strparent">新产生节点子节点参数</param>
  public void AddTwoXML(string path, string rootNode, string createNode, string[,] attribute, string[,] strparent,out string msg)
  {
   msg = "";
   if (System.IO.File.Exists(path))//检查路径是否正确
   {
    xmlDoc = new XmlDocument();
    xmlDoc.Load(path);
    XmlNode xmlnode = xmlDoc.SelectSingleNode(rootNode);
    XmlElement xe = xmlDoc.CreateElement(createNode);
    if (attribute != null)
    {
     int length = attribute.Length / 2;
     if (length > 0)
     {
      xe.SetAttribute("key", Guid.NewGuid().ToString());
      for (int i = 0; i < length; i++)
      {
       xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
      }
     }
     if (strparent != null && createNode != "")
     {

      int parantLength = strparent.Length / 2;
      for (int i = 0; i < parantLength; i++)
      {

       XmlElement parantXe = xmlDoc.CreateElement(strparent[0, i].ToString());
       parantXe.InnerText = strparent[1, i].ToString();
       xe.AppendChild(parantXe);
      }
     }
     xmlnode.AppendChild(xe);
    }
    xmlDoc.Save(path);
   }
   else
   {
    msg = "error path;Please check your path";
   }
  }
  #endregion
  #region 删除带key的节点与其下一级的子节点
      
  /// <summary>
  /// 删除属性带key的节点,key:GUID
  /// </summary>
  /// <param name="xmldoc">XmlDocument对象</param>
  /// <param name="rootnode">XML文件根节点</param>
  /// <param name="key">GUID</param>
  /// <param name="msg">返回信息</param>
  ///
  public XmlDocument DeleteXMLNode(XmlDocument xmldoc, string rootnode, string key, out string msg)
  {
   msg = "";
   XmlNodeList nodelist = xmldoc.SelectSingleNode(rootnode).ChildNodes;
   foreach (XmlNode xmlnode in nodelist)
   {
    XmlElement xe = (XmlElement)xmlnode;
    if (xe.GetAttribute("key") == key)
    {
     try
     {
      XmlNodeList parantlist = xe.ChildNodes;
      foreach (XmlNode parantXmlNode in parantlist)
      {
       XmlElement xel = (XmlElement)parantXmlNode;
       xel.ParentNode.RemoveChild(xel);
      }
      xe.ParentNode.RemoveChild(xe);
     }
     catch
     {
      msg = "error:Operate XML file error";
     }
    }
   }
   return xmldoc;
  }
  /// <summary>
  /// 删除属性带key的节点,key:GUID
  /// </summary>
  /// <param name="path">XML文件路径</param>
  /// <param name="rootnode">根节点</param>
  /// <param name="key">key:Guid</param>
  /// <param name="msg">返回的信息</param>
  public void DeleteXMLNode(string path,string rootnode,string key,out string msg)
  {
   msg = "";
   if (System.IO.File.Exists(path))
   {  //先判断是否存在该文件(路径),如果存在,可以操作
    xmlDoc = new XmlDocument();
    xmlDoc.Load(path);
    XmlNodeList xl = xmlDoc.SelectSingleNode(rootnode).ChildNodes;
    foreach (XmlNode xmlnode in xl)
    {
     XmlElement xe = (XmlElement)xmlnode;
     if (xe.GetAttribute("key") == key)
     {

      XmlNodeList xls = xe.ChildNodes;
      foreach (XmlNode parentNode in xls)
      {
       XmlElement xel = (XmlElement)parentNode;
       xel.ParentNode.RemoveChild(xel);
      }
      xe.ParentNode.RemoveChild(xe);
     }
    }
    try
    {
     xmlDoc.Save(path);
    }
    catch (XmlException ex)
    {
     msg = "error:" + ex.Message;
    }
   }
   else
   {
    msg = "error path:Please check your path";
   }
  }
  #endregion
  #region 更新带key的节点的属性

  /// <summary>
  /// 更新带key节点的属性
  /// </summary>
  /// <param name="xmldoc">XmlDocument对象</param>
  /// <param name="rootnode">根节点</param>
  /// <param name="key">key:Guid</param>
  /// <param name="attribute">string[,]要更新的属性</param>
  /// <param name="msg">返回的信息</param>
  /// <returns></returns>
  public XmlDocument UpdateXMLAttribute(XmlDocument xmldoc,string rootnode, string key,string[,] attribute, out string msg)
  {
   msg = "";
   XmlNodeList xnl =  xmldoc.SelectSingleNode(rootnode).ChildNodes;
   foreach (XmlNode xn in xnl)
   {
    XmlElement xe = (XmlElement)xn;
    if (xe.GetAttribute("key") == key)
    {
     if (attribute != null)
     {
      int length = attribute.Length / 2;
      for (int i = 0; i < length; i++)
      {
       xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
      }
     }
    }
   }
   return xmldoc;
  }
  #endregion
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rains卍Soft

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

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

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

打赏作者

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

抵扣说明:

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

余额充值