• C# 写入XML文档三种方法详细介绍
    <?xml version="1.0" encoding="UTF-8"?> 
    <Contacts> 
    <Contact id="01"> 
    <Name>Daisy Abbey</Name> 
    <Gender>female</Gender> 
    </Contact> 
    </Contacts> 

    若要实现以上xml文件,以下3种方法


    1使用XmlDocument类

    var xmlDoc = new XmlDocument(); 
    //Create the xml declaration first 
    xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null)); 
    //Create the root node and append into doc 
    var el = xmlDoc.CreateElement("Contacts"); 
    xmlDoc.AppendChild(el); 
    // Contact 
    XmlElement elementContact = xmlDoc.CreateElement("Contact"); 
    XmlAttribute attrID = xmlDoc.CreateAttribute("id"); 
    attrID.Value = "01"; 
    elementContact.Attributes.Append(attrID); 
    el.AppendChild(elementContact); 
    // Contact Name 
    XmlElement elementName = xmlDoc.CreateElement("Name"); 
    elementName.InnerText = "Daisy Abbey"; 
    elementContact.AppendChild(elementName); 
    // Contact Gender 
    XmlElement elementGender = xmlDoc.CreateElement("Gender"); 
    elementGender.InnerText = "female"; 
    elementContact.AppendChild(elementGender); 
    xmlDoc.Save("test1.xml"); 

    2.使用LINQ to XML 的XDocument类: 

    方法一(XDocument)、

    var doc = new XDocument( 
    new XElement("Contacts", 
    new XElement("Contact", 
    new XAttribute("id", "01"), 
    new XElement("Name", "Daisy Abbey"), 
    new XElement("Gender", "female") 
    ) 
    ) 
    ); 
    doc.Save("test2.xml"); 


    方法二‘(XElement)、

            /// <summary>
            /// 2、添加元素
            /// </summary>
            /// <param name="xmlpath">XML文件的路径</param>
            private static void AddXmlElement(string xmlpath)
            {
                ///导入XML文件
                XElement xe = XElement.Load(xmlpath);
                ///创建一个新节点
                XElement book1 = new XElement("Book",
                                   new XAttribute("BookID", "002"),
                                   new XElement("BookNo", "0002"),
                                   new XElement("BookName", "Book 0002"),
                                   new XElement("BookPrice", "50"),
                                   new XElement("BookRemark", "This is a book 0002")
                    );
                ///添加节点到XML文件中,并保存
                xe.Add(book1);
                ///创建一个新节点
                XElement book2 = new XElement("Book",
                                   new XAttribute("BookID", "003"),
                                   new XElement("BookNo", "0003"),
                                   new XElement("BookName", "Book 0003"),
                                   new XElement("BookPrice", "30"),
                                   new XElement("BookRemark", "This is a book 0003")
                    );
                ///添加节点到XML文件中,并保存
                xe.Add(book2);
                ///创建一个新节点
                XElement book3 = new XElement("Book",
                                   new XAttribute("BookID", "004"),
                                   new XElement("BookNo", "0004"),
                                   new XElement("BookName", "Book 0004"),
                                   new XElement("BookPrice", "60"),
                                   new XElement("BookRemark", "This is a book 0004")
                    );
                ///添加节点到XML文件中
                xe.Add(book3);
                ///保存到XML文件中
                xe.Save(xmlpath);
    
                Console.WriteLine(xe);
            }
                //调用函数AddXmlElement(string xmlpath)
                ///添加XML元素
                Program.AddXmlElement(@"C:\BookStore.xml");
    


    方法三(XEelemtnt)、
    XElement el = XElement.Load(Server.MapPath("Data/Product.xml"));
    
    XElement product = new XElement
    (
        "Product",
        new XAttribute("ID", 2),
        new XElement("ProductName", "LINQ to Object"),
        new XElement("UnitPrice", 20m),
        new XElement("Remark", "")
    );
    
    el.Add(product);
    el.Save(Server.MapPath("Data/Product.xml"));



    3.使用XmlTextWriter类: 

    String filename = String.Concat("test3.xml"); 
    using (StreamWriter sw = new StreamWriter(filename)) 
    { 
    // Create Xml Writer. 
    XmlTextWriter xmlWriter = new XmlTextWriter(sw); 
    // 也可以使用public XmlTextWriter(string filename, Encoding encoding)来构造 
    // encoding默认为 UTF-8. 
    //XmlTextWriter writer = new XmlTextWriter("test3.xml", null); 
    // Set indenting so that its easier to read XML when open in Notepad and such apps. 
    xmlWriter.Formatting = Formatting.Indented; 
    // This will output the XML declaration 
    xmlWriter.WriteStartDocument(); 
    xmlWriter.WriteStartElement("Contacts"); 
    xmlWriter.WriteStartElement("Contact"); 
    xmlWriter.WriteAttributeString("id", "01"); 
    xmlWriter.WriteElementString("Name", "Daisy Abbey"); 
    xmlWriter.WriteElementString("Gender", "female"); 
    // close contact </contact> 
    xmlWriter.WriteEndElement(); 
    // close contacts </contact> 
    xmlWriter.WriteEndElement(); 
    xmlWriter.WriteEndDocument(); 
    xmlWriter.Close(); 
    } 



    展开全文
  • C# 关于xml读写操作

    2019-05-14 17:22:05
    项目中用到关于xml文件读写操作,保存数据较少,目前仅用简单的方法实现(XmlDocument),另外两种方法:以后再添加:XmlTextReader和Linq to Xml。 1保存xml数据 private void savexml_Click(object sender, ...

    项目中用到关于xml文件读写操作,保存数据较少,目前仅用简单的方法实现(XmlDocument),另外两种方法:以后再添加:XmlTextReader和Linq to Xml。
    1保存xml数据

    private void savexml_Click(object sender, EventArgs e)
            {
                ///bbj 2019-5-14
                ///将panel容器中的控件保存到xml文件中
                ///
                XmlDocument ledConfigDoc = new XmlDocument();//建立XmlDocument对象
                string filepath = Environment.CurrentDirectory;//获取当前路径
                filepath += "\\LedxmlConfig.xml";
                ledConfigDoc.Load(filepath);//加载xml文件
                ledConfigDoc.LoadXml("<ledconfig></ledconfig>");//覆盖保存
    
                XmlNode root = ledConfigDoc.SelectSingleNode("ledconfig");//建立跟节点
    
                XmlElement xeKey = ledConfigDoc.CreateElement("config");//创建子节点,并且设置子节点的属性
                XmlAttribute xeType = ledConfigDoc.CreateAttribute("Type");
                xeType.InnerText = "form";
                xeKey.SetAttributeNode(xeType);
    
                XmlAttribute xeType2 = ledConfigDoc.CreateAttribute("subtype");
                xeType2.InnerText = "form";
                xeKey.SetAttributeNode(xeType2);
    
                XmlElement xeformX = ledConfigDoc.CreateElement("formX");//创建子节点
                xeformX.InnerText = panel.Tag.ToString();
                xeKey.AppendChild(xeformX);
    
                XmlElement xeformY = ledConfigDoc.CreateElement("formY");
                xeformY.InnerText = panel.TabIndex.ToString();
                xeKey.AppendChild(xeformY);
    
                XmlElement xeformWidth = ledConfigDoc.CreateElement("formWidth");
                xeformWidth.InnerText = panel.Width.ToString();
                xeKey.AppendChild(xeformWidth);
    
                XmlElement xeformHeight = ledConfigDoc.CreateElement("formHeight");
                xeformHeight.InnerText = panel.Height.ToString();
                xeKey.AppendChild(xeformHeight);
                root.AppendChild(xeKey);//挂载父节点
    
                //保存面板中所有标签的配置
    
                
    
                foreach (Control ctro in this.panel.Controls)//将容器中的控件遍历保存配置到xml文件,每个控件作为一个节点
                {
                    XmlElement xeKeytmp = ledConfigDoc.CreateElement("config");
                    XmlAttribute xeTypetmp = ledConfigDoc.CreateAttribute("Type");
                    XmlAttribute xesubTypetmp = ledConfigDoc.CreateAttribute("subtype");
                    XmlElement xelabelX = ledConfigDoc.CreateElement("labelX");
                    XmlElement xelabelY = ledConfigDoc.CreateElement("labelY");
                    XmlElement xelabelWidth = ledConfigDoc.CreateElement("labelWidth");
                    XmlElement xelabelHeight = ledConfigDoc.CreateElement("labelHeight");
                    XmlElement xelabelFontStr = ledConfigDoc.CreateElement("labelFontStr");
                    XmlElement xelabelFontSize = ledConfigDoc.CreateElement("labelFontSize");
                    XmlElement xelabelFontStyle = ledConfigDoc.CreateElement("labelFontStyle");
                    XmlElement xelabelForeColor = ledConfigDoc.CreateElement("labelForeColor");
                    XmlElement xelabelText = ledConfigDoc.CreateElement("labelText");
    
                        xeTypetmp.InnerText = "label";
                        xeKeytmp.SetAttributeNode(xeTypetmp);
    
                        xesubTypetmp.InnerText = ctro.Tag.ToString();
                        xeKeytmp.SetAttributeNode(xesubTypetmp);
    
                        xelabelX.InnerText = ctro.Location.X.ToString();
                        xeKeytmp.AppendChild(xelabelX);
    
                        xelabelY.InnerText = ctro.Location.Y.ToString();
                        xeKeytmp.AppendChild(xelabelY);
    
                        xelabelWidth.InnerText = ctro.Width.ToString() ;
                        xeKeytmp.AppendChild(xelabelWidth);
    
                        xelabelHeight.InnerText = ctro.Height.ToString();
                        xeKeytmp.AppendChild(xelabelHeight);
    
                        xelabelFontStr.InnerText = ctro.Font.FontFamily.Name;
                        xeKeytmp.AppendChild(xelabelFontStr);
    
                        xelabelFontSize.InnerText = ctro.Font.Size.ToString();
                        xeKeytmp.AppendChild(xelabelFontSize);
    
                        xelabelFontStyle.InnerText = ctro.Font.Style.ToString();
                        xeKeytmp.AppendChild(xelabelFontStyle);
    
                        xelabelForeColor.InnerText = ctro.ForeColor.Name;
                        xeKeytmp.AppendChild(xelabelForeColor);
    
                        xelabelText.InnerText = ctro.Text;
                        xeKeytmp.AppendChild(xelabelText);
                        root.AppendChild(xeKeytmp);               
                }
                ledConfigDoc.Save(filepath);//保存xml文件         
            }
    

    在这里插入图片描述
    2读取xml文件

     XmlDocument doc;
                #region 
                ///<summary>
                ///bbj 2019-5-14
                ///防止xml中的注释对读取文档有影响
                doc = new XmlDocument();
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.IgnoreComments = true;//忽略文档中的注释
                string filepath = Environment.CurrentDirectory;
                filepath += "\\LedxmlConfig.xml";
                XmlReader reader = XmlReader.Create(filepath, settings);
                doc.Load(reader);
                #endregion
                XmlNode xn = doc.SelectSingleNode("ledconfig");//得到根节点
                XmlNodeList xnl = xn.ChildNodes;//得到根节点下所有的子节点
                LedFormConfig lfc = new LedFormConfig();
                List<LedLabelControls> labelList = new List<LedLabelControls>();
                LedLabelControls labelTmp = null;
                foreach (XmlNode xnode in xnl)
                {
                    //xmlclass bookclass = new xmlclass();
                    XmlElement xe = (XmlElement)xnode;
                    string str = xe.GetAttribute("Type").ToString();
                    XmlNodeList xnlist = xe.ChildNodes;
                    if(str == "form")
                    {
                        lfc.formX =Convert.ToInt32(xnlist.Item(0).InnerText);
                        lfc.formY = Convert.ToInt32(xnlist.Item(1).InnerText);
                        lfc.formWidth = Convert.ToInt32(xnlist.Item(2).InnerText);
                        lfc.formHeight = Convert.ToInt32(xnlist.Item(3).InnerText);
                    }
                    if (str == "label")
                    {
                        labelTmp = new LedLabelControls();
                        labelTmp.labelX = Convert.ToInt32(xnlist.Item(0).InnerText);
                        labelTmp.labelY = Convert.ToInt32(xnlist.Item(1).InnerText);
                        labelTmp.labelWidth = Convert.ToInt32(xnlist.Item(2).InnerText);
                        labelTmp.labelHeight = Convert.ToInt32(xnlist.Item(3).InnerText);               
                        labelTmp.labelFontStr = xnlist.Item(4).InnerText;
                        labelTmp.labelFontSize = Convert.ToInt32(xnlist.Item(5).InnerText);
                        labelTmp.labelFontStyle = xnlist.Item(6).InnerText;
                        labelTmp.labelForeColor = xnlist.Item(7).InnerText;
                        labelTmp.labelText = xnlist.Item(8).InnerText;
                        labelTmp.labelTag = xe.GetAttribute("subtype").ToString();
                        labelList.Add(labelTmp);
                    }
                }
                reader.Close();//读取xml文件结束
                。。。。后续操作。。。
    

    在这里插入图片描述

    展开全文
  • 下面的例子是用C# 在asp.net 中实现对xml的操作,环境是vs2005 , 自己了一个操作类,然后在使用的时候调用它。实现:登录用户信息的添加、修改和删除,不使用数据库,只在本地存放一个xml文件。时间:2007年12月...

    下面的例子是用C# 在asp.net 中实现对xml的操作,环境是vs2005 , 自己写了一个操作类,然后在使用的时候调用它。

    实现:登录用户信息的添加、修改和删除,不使用数据库,只在本地存放一个xml文件。

    时间:2007年12月21日

    下面是User.xml文件的格式,放在网站跟目录中,本例只为实现操作xml的功能,所以登录密码没有加密,在实际应用中,你应该考虑这个问题。同时,这个文件应该赋予写入的权限,这点比较容易疏漏。

    <?xml version="1.0"?>
    <UserLogin>
      
    <User>
        
    <UserCode>001</UserCode>
        
    <UserName>操作员1</UserName>
        
    <UserPwd>111</UserPwd>
      
    </User>
      
    <User>
        
    <UserCode>002</UserCode>
        
    <UserName>操作员2</UserName>
        
    <UserPwd>222</UserPwd>
      
    </User>
    </UserLogin>

    下面我们开始编码,首先vs2005中创建asp.net 网站,选择c#语言

    新建一个web窗体,放上三个textbox,三个button,暂时不用改名字,为了方便大家(以及我懒)这个例子中没有改控件的名字(脸红)。

     接着新建项目--类,取名为XmlRW.cs,存放到app_Code文件夹中

    在最上部加上对xml的using  : using System.Xml  如下面的代码

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Xml;

    /// <summary>
    /// Xml文件的读写类
    /// </summary>
    /// 

    public class XmlRW
    {
        
    public XmlRW()
        
    {
            
    //
            
    // TODO: 在此处添加构造函数逻辑
            
    //
        }


    ////  大家注意 我们下面的内容在这里写

    }

    然后,我们开始写三个方法,来完成对xml文件记录的增加,修改和删除,也就是对UserCode,UserName,NamePwd的操作。代码如下:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Xml;

    /**//// <summary>
    /// Xml文件的读写类
    /// </summary>
    /// 

    public class XmlRW
    {
        
    public XmlRW()
        
    ...{
            
    //
            
    // TODO: 在此处添加构造函数逻辑
            
    //
        }

        
        
    //WriteXml 完成对User的添加操作 
        
    //FileName 当前xml文件的存放位置
        
    //UserCode 欲添加用户的编码
        
    //UserName 欲添加用户的姓名
        
    //UserPassword 欲添加用户的密码

        
    public void WriteXML(string FileName,string UserCode,string UserName,string UserPassword)
        
    {
        
            
    //初始化XML文档操作类
            XmlDocument myDoc = new XmlDocument();
            
    //加载XML文件
            myDoc.Load(FileName);

            
    //添加元素--UserCode
            XmlElement ele = myDoc.CreateElement("UserCode");
            XmlText text 
    = myDoc.CreateTextNode(UserCode);

            
    //添加元素--UserName
            XmlElement ele1 = myDoc.CreateElement("UserName");
            XmlText text1 
    = myDoc.CreateTextNode(UserName);

            
    //添加元素--UserPwd
            XmlElement ele2 = myDoc.CreateElement("UserPwd");
            XmlText text2 
    = myDoc.CreateTextNode(UserPassword);

            
    //添加节点 User要对应我们xml文件中的节点名字
            XmlNode newElem = myDoc.CreateNode("element""User""");

            
    //在节点中添加元素
            newElem.AppendChild(ele);
            newElem.LastChild.AppendChild(text);
            newElem.AppendChild(ele1);
            newElem.LastChild.AppendChild(text1);
            newElem.AppendChild(ele2);
            newElem.LastChild.AppendChild(text2);

            
    //将节点添加到文档中
            XmlElement root = myDoc.DocumentElement;
            root.AppendChild(newElem);

            
    //保存
            myDoc.Save(FileName);
            
        }


        
    //DeleteNode 完成对User的添加操作 
        
    //FileName 当前xml文件的存放位置
        
    //UserCode 欲添加用户的编码

        
    public void DeleteNode(string FileName, string UserCode)
        
    {
            
    //初始化XML文档操作类
            XmlDocument myDoc = new XmlDocument();
            
    //加载XML文件
            myDoc.Load(FileName);

            
    //搜索指定某列,一般是主键列
            XmlNodeList myNode = myDoc.SelectNodes("//UserCode");

            
    //判断是否有这个节点

            
    if (!(myNode == null))
            

                
    //遍历节点,找到符合条件的元素

                
    foreach (XmlNode  xn in myNode)
                
    {
                    
    if (xn.InnerXml  == UserCode)
                        
    //删除元素的父节点
                        xn.ParentNode.ParentNode.RemoveChild(xn.ParentNode);
                }

            }


            
    //保存
            myDoc.Save(FileName);

        }


        
    //WriteXml 完成对User的修改密码操作
        
    //FileName 当前xml文件的存放位置
        
    //UserCode 欲操作用户的编码
        
    //UserPassword 欲修改用户的密码

        
    public void UpdateXML(string FileName, string UserCode, string UserPassword)
        
    {

            
    //初始化XML文档操作类
            XmlDocument myDoc = new XmlDocument();
            
    //加载XML文件
            myDoc.Load(FileName);

            
    //搜索指定的节点
            System.Xml.XmlNodeList nodes = myDoc.SelectNodes("//User");

            
    if (nodes != null)
            
    {
                
    foreach (System.Xml.XmlNode xn in nodes)
                
    {
                    
    if (xn.SelectSingleNode("UserCode").InnerText == UserCode)
                    
    {
                        xn.SelectSingleNode(
    "UserPwd").InnerText = UserPassword;
                    }


                }

            }


            myDoc.Save(FileName);

        }


    }

    Ok!这样操作xml的类我们就基本搞定了,下面回到一开始我们创建的那个页面上,为三个button加入它们相应的代码,即可超级轻松的实现对登录用户的操作,吼吼~

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class XmlTest1 : System.Web.UI.Page
    {
        
    protected void Page_Load(object sender, EventArgs e)
        
    {

        }


        
    protected void Button1_Click(object sender, EventArgs e)
        
    {

            
    //添加引用,创建实例
            XmlRW myXml = new XmlRW();
            
    //调用我们实现定义好的方法,对应传入各个参数
            myXml.WriteXML(Server.MapPath("YtConfig.xml"), TextBox1.Text, TextBox2.Text, TextBox3.Text);

            Response.Write(
    "Save OK!");

        }

        
    protected void Button2_Click(object sender, EventArgs e)
        
    {
            XmlRW myXml 
    = new XmlRW();
            myXml.DeleteNode(Server.MapPath(
    "YtConfig.xml"), TextBox1.Text );

            Response.Write(
    "Delete OK!");

        }

        
    protected void Button3_Click(object sender, EventArgs e)
        
    {
            XmlRW myXml 
    = new XmlRW();
            myXml.UpdateXML(Server.MapPath(
    "YtConfig.xml"), TextBox1.Text, TextBox3.Text );

            Response.Write(
    "Update OK!");

        }

    }

    运行测试,在textbox1中输入用户编码,在textbox2中填入用户名称,在textbox3中填入登录密码,点击button1完成添加....注意xml要事先先建好才行,其它略同.

     

    展开全文
  • C# Xml文件的读写总结

    2017-02-27 09:44:58
    1 先看需要创建的xml文件格式, 代码: /// /// 创建默认的模板文件 /// /// 64 或者128 public static void Create_TemplateFile() { string path = "test.xml";

    1  Xml写入


    代码:

        string path = "test.xml";
    
                    XmlTextWriter writeXml = new XmlTextWriter(path, Encoding.UTF8);
                    writeXml.WriteStartDocument(false);
                    writeXml.WriteStartElement("TemplateList");
                    writeXml.WriteComment("模板列表");
    
                    for (int i = 1; i <= 10; i++)
                    {
                        writeXml.WriteStartElement("Template" + i);//模板名
                        writeXml.WriteAttributeString("Id", "" + i);
                        writeXml.WriteAttributeString("Name", "模板" + i);
                        writeXml.WriteAttributeString("Unit", "省级");
                        writeXml.WriteAttributeString("DevType", i % 2 == 0 ? "64" : "128");
                        writeXml.WriteAttributeString("Version", "V1.0.0");
                        writeXml.WriteAttributeString("SwitchString", "");
    
                        for (int j = 1; j < 3; j++) //测试数据
                        {
                            writeXml.WriteStartElement("InPort");//输入口 
                            writeXml.WriteAttributeString("InPortId", "" + j);
                            writeXml.WriteAttributeString("TemplateId", "" + i);
                            writeXml.WriteAttributeString("OutPort", "" + i);
                            writeXml.WriteEndElement();
                        }
    
                        writeXml.WriteEndElement();
                    }
    
                    writeXml.Flush();
                    writeXml.Close();
            }


     此案例中,主要用到XmlTextWriter来创建xml,其中

    WriteStartElement 创建节点

    WriteComment 描述信息

    WriteAttributeString 节点的属性

    WriteEndElement 节点关闭

    Flush 刷新流

    Close 关闭写入

    值得注意的是,有了WriteStartElement 就必须对应一个WriteEndElement ,创建节点的属性只需要把WriteAttributeString 写在WriteStartElement 

    的后边即可!

    2 获取节点

       假如我要获取Template1的所有子节点

       XmlNodeList nodeList = xmlDoc.SelectSingleNode("TemplateList//Template" + info.TemplateId).ChildNodes;

    3 设置属性值

           假如我要修改template1的属性值
      xmlDoc.SelectSingleNode("TemplateList//Template" + info.TemplateId).Attributes["Name"].InnerText = info.Name;
      xmlDoc.SelectSingleNode("TemplateList//Template" + info.TemplateId).Attributes["Unit"].InnerText = info.Unit;
      xmlDoc.SelectSingleNode("TemplateList//Template" + info.TemplateId).Attributes["DevType"].InnerText = info.DevType;
      xmlDoc.SelectSingleNode("TemplateList//Template" + info.TemplateId).Attributes["Version"].InnerText = info.Version;
      xmlDoc.SelectSingleNode("TemplateList//Template" + info.TemplateId).Attributes["SwitchString"].InnerText = info.SwitchString;

    4 遍历节点

           假如我要遍历template1的所有子节点,并查找InPortId==“1”的节点,且删掉
      foreach (XmlNode xn in nodeList)
       {
                            XmlElement xe = (XmlElement)xn;
                            if (xe.Attributes["InPortId"].InnerText == "1")
                            {
                                // 找到相同项,删除掉
                                xmlDoc.DocumentElement.SelectSingleNode("Template" + info.TemplateId).RemoveChild(xn);
                                xmlDoc.Save(path); 
                                break;
                            }
           }

    5 数据更新 - 1 

       C#  Code:
            /// <summary>
            /// 设备信息更新
            /// </summary>
            /// <param name="info"></param>
            /// <returns></returns>
            public static bool DeviceUpdate(DeviceDetail info)
            {
                bool bo = false;
    
                try
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    string filePath = GetPath(info.DevId);
                    xmlDoc.Load(filePath);
                    XmlNode node = xmlDoc.SelectSingleNode("MatrixList//Device");
                    XmlElement ee = (XmlElement)node;
                    ee.SetAttribute("DevName", info.DevName);
                    ee.SetAttribute("DevType", info.DevType);
                    ee.SetAttribute("DevIp", info.DevIp);
                    ee.SetAttribute("DevPort", info.DevPort);
                    xmlDoc.Save(filePath);
                    bo = true;
    
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
    
                return bo;
            }


    代码调用:
    DeviceDetail info = new DeviceDetail();
                    info.DevId = tbDevId.Text;
                    info.DevName = tbDevName.Text;
                    info.DevType = (cbbDevType.SelectedIndex == 0 ? 64 : 128).ToString();
                    info.DevIp = tbDevIp.Text;
                    info.DevPort = tbDevPort.Text;
    
                    bo = MatrixManager.DeviceUpdate(info);
                    if (bo == true)
                    {
                        MessageBox.Show("保存成功,请重启客户端!");
                    }
                    else
                    {
                        MessageBox.Show("保存失败!");
                    }


    XML文件结构:



    6 数据更新 - 2

    C# Code:
            /// <summary>
            /// 热备份保存
            /// </summary>
            /// <param name="devId">设备id</param>
            /// <param name="nodeStr">节点路径</param>
            /// <param name="item">要修改的属性</param>
            /// <param name="data">要修改的属性内容</param>
            /// <returns></returns>
            public static bool HotBackUpdate(string devId, string nodeStr, HotBackInfo info)
            {
                bool bo = false;
    
                try
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    string filePath = GetPath(devId);
                    xmlDoc.Load(filePath);
                    XmlNode node = xmlDoc.SelectSingleNode(nodeStr);
                    XmlElement ee = (XmlElement)node;
                    ee.SetAttribute("ID", info.Card);
                    ee.SetAttribute("Mode", info.Mode);
                    ee.SetAttribute("Chunnel", info.Chunnel);
                    xmlDoc.Save(filePath);
                    bo = true;
    
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
    
                return bo;
            }


    代码调用:

        MatrixManager.HotBackUpdate("1", "MatrixList//HotBack//Card" + (wedgeBox.SelectedIndex + 1), info);
    
         MessageBox.Show("更新成功!");

    XML结构:









































    展开全文
  • c#读写xml的例子网上很多,也很简单,但在实际的运用过程中却发现有许多的困难。之前操作的xml文件一般都是自己定义的。通常的写法就是: XmlDocument doc = new XmlDocument(); string path = "config.xml...

    c#读写xml的例子网上很多,也很简单,但在实际的运用过程中却发现有许多的困难。之前操作的xml文件一般都是自己定义的。通常的写法就是:

     XmlDocument doc = new XmlDocument();
                string path = "config.xml";
                doc.Load(path);
                //xml读取操作
                doc.Save(path);

    这通常是没有问题的,但是,如果编码格式不对就会报错:给定编码中的字符无效!

    就比如我的这个xml文件,一般xml文件头都会标记出编码格式,但有的只有这么一行:

    <?xml version='1.0' standalone='yes' ?>

    那么到底该怎么读取特定编码格式的xml文件呢,同时我们应该怎么确定xml文件的编码格式。

    这里,我用的是NotePad++编辑器,我也是偶然间发现它能识别文件的编码格式,一般学编程的朋友都会使用它,还么有下载的朋友可以get起来啦。我们使用这个软件打开xml文件,在底部就会看到文件的编码格式:

    知道了编码格式我们就可操作了,具体方法如下:

     XmlDocument doc = new XmlDocument();
                string path = "config.xml";
                using (StreamReader reader = new StreamReader(path, Encoding.GetEncoding("GB2312")))
                {
                    doc.Load(reader);//使用数据流读取可以确定读取编码格式
                }
                //doc.Load(path);
                //xml读取操作
                doc.Save("config1.xml");

    这样,读取就没什么问题了,但是,当打开保存的文件,却发现编码格式变了,这肯定是不行的,不可能每次打开都要切换读取的编码格式,而且很多时候保存的文件会出现乱码等问题:

    原因是save方法默认保存为UTF-8格式,所以在进行写入的时候也应该确定编码格式,同样是使用数据流,具体方法:

    XmlDocument doc = new XmlDocument();
                string path = "config.xml";
                using (StreamReader reader = new StreamReader(path, Encoding.GetEncoding("GB2312")))
                {
                    doc.Load(reader);//使用数据流读取可以确定读取编码格式
                }
                //doc.Load(path);
                //xml读取操作
                // doc.Save("config1.xml");
                using (StreamWriter sw = new StreamWriter("config1.xml", false, Encoding.GetEncoding("GB2312")))
                {
                    doc.Save(sw);
                };

    运行结果:

    保存的格式达到目的,而且不会出现乱码。

    展开全文
  • 详细阐述C# 操作XML文件的常用方法,包括创建XML节点,元素,读取,删除,查找,保存等等。
  • c#读写xml文件

    2007-04-15 16:04:00
    c#读写xml文件已知有一个XML文件(bookstore.xml)如下: Oberons Legacy Corets, Eva 5.95 1、往节点中插入一个节点: XmlDocument xmlDoc=new XmlDocument(); xmlDoc.Load("bookstore.xml"); XmlNode root=...
  • 先在配置文件里好需要的配置内容&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;Configure&gt; &lt;portConfigure&gt; &lt;PortName&gt;COM4&lt;/...
  • XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具...
  • C#读写配置文件(XML文件),C#读写XML文件
  • XML文件读取(C#

    2018-12-02 01:46:11
    首先程序访问且操作xml文件有两种模型:DOM(文档对象模型)、流模型。 DOM:允许编辑和更新文档,可随机访问文档中的数据,可使用XPath查询,但是必须要一次性将文档加载在内存中,对于大型的文件就会造成资源问题...
  • C# XML添加属性和节点

    2016-02-21 22:31:00
    XmlDocument XmlDoc = new XmlDocument(); XmlDoc.Load("DBConfig.xml"); XmlNode root = XmlDoc.SelectSingleNode("Config"); XmlElement db = XmlDoc.CreateElement("DB");
  • XML文件进行操作(写入,读取)时需要引用命名空间 using System.IO; using System.Xml; 写入XML文件 创建文件流对象 创建StreamWriter对象,传入参数(文件流,文字编码模式) 调用StreamWriter对象的...
  • C#开发学习笔记:xml文件的写入操作
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace xml { class Program { static void Main(string[] args) ... XmlDocument xmlDoc =
  • C#直接是自有包可以轻松对XML完成读写。下面用一个程序展示C#如何对XML进行读写。如下图所示,有一个窗体程序,可以读写XML。 下面是写入XML功能的展示。 下面是读XML的展示,并且修改之后再写入: 具体...
  • 最近在整理以前用到的知识,看到XML的读取和存储,用到了序列化和反序列化,可以直接将对象信息存储起来,读取时可以直接实例化对象,开发单机游戏时可以用到,希望对你有所帮助。1,XMLSaveAndRead.cs文件using ...
  • C# XML文件读取

    2018-10-31 19:12:26
    前言 xml也是一种文本格式 我们一般将信息存储在节点属性...C#中内置有对xml的解析库, using System. Xml &amp;lt;SkillInfo&amp;gt; &amp;lt;SkillList&amp;gt; &amp;lt;Skill Sk.
  • C#XML、JSON等格式的解析一、C#XML格式数据的解析1、用XMLDocument来解析 XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load("test.xml"); //创建新节点 XmlElement nn = xmlDocument....
  • 原文在百度知道中,来源于多个网友。 新浪微博:... (一) 保存 var xml =XElement.Load(@"路径");...xml.Element("节点名字").AddAfterSelf(new XElement("节点名字","要添加的值")); xml,Save(@"路径");
1 2 3 4 5 ... 20
收藏数 168,847
精华内容 67,538