zoukankan      html  css  js  c++  java
  • C# 关于XML的内容

    1、简单介绍

    using System.Xml;
    //初始化一个xml实例
    XmlDocument xml=new XmlDocument();

    //导入指定xml文件
    xml.Load(path);
    xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));

    //指定一个节点
    XmlNode root=xml.SelectSingleNode("/root");

    //获取节点下所有直接子节点
    XmlNodeList childlist=root.ChildNodes;

    //判断该节点下是否有子节点
    root.HasChildNodes;

    //获取同名同级节点集合
    XmlNodeList nodelist=xml.SelectNodes("/Root/News");

    //生成一个新节点
    XmlElement node=xml.CreateElement("News");

    //将节点加到指定节点下,作为其子节点
    root.AppendChild(node);

    //将节点加到指定节点下某个子节点前
    root.InsertBefore(node,root.ChildeNodes[i]);

    //为指定节点的新建属性并赋值
    node.SetAttribute("id","11111");

    //为指定节点添加子节点
    root.AppendChild(node);

    //获取指定节点的指定属性值
    string id=node.Attributes["id"].Value;

    //获取指定节点中的文本
    string content=node.InnerText;

    //保存XML文件
    string path=Server.MapPath("~/file/bookstore.xml");
    xml.Save(path);
    //or use :xml.Save(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));

    ---------------------------------------------------------------------------------------------------

    二、具体实例

    在C#.net中如何操作XML
    需要添加的命名空间:
    using System.Xml;

    1、创建到服务器同名目录下的xml文件:

    方法一:

    [c-sharp:nogutter] view plaincopyprint?
    1. XmlDocument xmldoc;  
    2.             XmlNode xmlnode;  
    3.             XmlElement xmlelem;  
    4.             xmldoc = new XmlDocument();  
    5.             //加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>   
    6.             XmlDeclaration xmldecl;  
    7.             xmldecl = xmldoc.CreateXmlDeclaration("1.0""gb2312"null);  
    8.             xmldoc.AppendChild(xmldecl);  
    9.             //加入一个根元素   
    10.             xmlelem = xmldoc.CreateElement("""Employees""");  
    11.             xmldoc.AppendChild(xmlelem);  
    12.             //加入另外一个元素   
    13.             for (int i = 1; i < 3; i++)  
    14.             {  
    15.                 XmlNode root = xmldoc.SelectSingleNode("Employees");//查找<Employees>   
    16.                 XmlElement xe1 = xmldoc.CreateElement("Node");//创建一个<Node>节点   
    17.                 xe1.SetAttribute("genre""李赞红");//设置该节点genre属性   
    18.                 xe1.SetAttribute("ISBN""2-3631-4");//设置该节点ISBN属性   
    19.                 XmlElement xesub1 = xmldoc.CreateElement("title");  
    20.                 xesub1.InnerText = "CS从入门到精通";//设置文本节点   
    21.                 xe1.AppendChild(xesub1);//添加到<Node>节点中   
    22.                 XmlElement xesub2 = xmldoc.CreateElement("author");  
    23.                 xesub2.InnerText = "候捷";  
    24.                 xe1.AppendChild(xesub2);  
    25.                 XmlElement xesub3 = xmldoc.CreateElement("price");  
    26.                 xesub3.InnerText = "58.3";  
    27.                 xe1.AppendChild(xesub3);  
    28.                 root.AppendChild(xe1);//添加到<Employees>节点中   
    29.             }  
    30.             //保存创建好的XML文档   
    31.             xmldoc.Save("data.xml");   

    方法二:

    [c-sharp:nogutter] view plaincopyprint?
    1. XmlTextWriter xmlWriter;  
    2.             string strFilename = "data1.xml";  
    3.             xmlWriter = new XmlTextWriter(strFilename, Encoding.Default);//创建一个xml文档   
    4.             xmlWriter.Formatting = Formatting.Indented;  
    5.             xmlWriter.WriteStartDocument();  
    6.             xmlWriter.WriteStartElement("Employees");  
    7.             xmlWriter.WriteStartElement("Node");  
    8.             xmlWriter.WriteAttributeString("genre""李赞红");  
    9.             xmlWriter.WriteAttributeString("ISBN""2-3631-4");  
    10.             xmlWriter.WriteStartElement("title");  
    11.             xmlWriter.WriteString("CS从入门到精通");  
    12.             xmlWriter.WriteEndElement();  
    13.             xmlWriter.WriteStartElement("author");  
    14.             xmlWriter.WriteString("候捷");  
    15.             xmlWriter.WriteEndElement();  
    16.             xmlWriter.WriteStartElement("price");  
    17.             xmlWriter.WriteString("58.3");  
    18.             xmlWriter.WriteEndElement();  
    19.             xmlWriter.WriteEndElement();  
    20.             xmlWriter.Close();  

    2、添加一个结点

    [c-sharp:nogutter] view plaincopyprint?
    1. XmlDocument xmlDoc = new XmlDocument();  
    2.            xmlDoc.Load("data.xml");  
    3.            XmlNode root = xmlDoc.SelectSingleNode("Employees");//查找<Employees>   
    4.            XmlElement xe1 = xmlDoc.CreateElement("Node");//创建一个<Node>节点   
    5.            xe1.SetAttribute("genre""张三");//设置该节点genre属性   
    6.            xe1.SetAttribute("ISBN""1-1111-1");//设置该节点ISBN属性   
    7.            XmlElement xesub1 = xmlDoc.CreateElement("title");  
    8.            xesub1.InnerText = "C#入门帮助";//设置文本节点   
    9.            xe1.AppendChild(xesub1);//添加到<Node>节点中   
    10.            XmlElement xesub2 = xmlDoc.CreateElement("author");  
    11.            xesub2.InnerText = "高手";  
    12.            xe1.AppendChild(xesub2);  
    13.            XmlElement xesub3 = xmlDoc.CreateElement("price");  
    14.            xesub3.InnerText = "158.3";  
    15.            xe1.AppendChild(xesub3);  
    16.            root.AppendChild(xe1);//添加到<Employees>节点中   
    17.            xmlDoc.Save("data.xml");  

    3、修改结点的值(属性和子结点)

    [c-sharp:nogutter] view plaincopyprint?
    1. XmlDocument xmlDoc = new XmlDocument();  
    2.            xmlDoc.Load("data.xml");  
    •            XmlNodeList nodeList = xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点   
    •            foreach (XmlNode xn in nodeList)//遍历所有子节点   
    •            {  
    •                XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型   
    •                if (xe.GetAttribute("genre") == "张三")//如果genre属性值为“张三”   
    •                {  
    •                    xe.SetAttribute("genre""update张三");//则修改该属性为“update张三”   
    •                    XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点   
    •                    foreach (XmlNode xn1 in nls)//遍历   
    •                    {  
    •                        XmlElement xe2 = (XmlElement)xn1;//转换类型   
    •                        if (xe2.Name == "author")//如果找到   
    •                        {  
    •                            xe2.InnerText = "亚胜";//则修改   
    •                        }  
    •                    }  
    •                }  
    •            }  
    •            xmlDoc.Save("data.xml");//保存。  

     

    4、修改结点(添加结点的属性和添加结点的自结点)

    [c-sharp:nogutter] view plaincopyprint?
    1. XmlDocument xmlDoc = new XmlDocument();  
    2.             xmlDoc.Load("data.xml");  
    •             XmlNodeList nodeList = xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点   
    •             foreach (XmlNode xn in nodeList)  
    •             {  
    •                 XmlElement xe = (XmlElement)xn;  
    •                 xe.SetAttribute("test""111111");  
    •                 XmlElement xesub = xmlDoc.CreateElement("flag");  
    •                 xesub.InnerText = "1";  
    •                 xe.AppendChild(xesub);  
    •             }  
    •             xmlDoc.Save("data.xml");  

     

    5、删除结点中的某一个属性

    [c-sharp:nogutter] view plaincopyprint?
    1. XmlDocument xmlDoc = new XmlDocument();  
    2.             xmlDoc.Load("data.xml");  
    •             XmlNodeList xnl = xmlDoc.SelectSingleNode("Employees").ChildNodes;  
    •             foreach (XmlNode xn in xnl)  
    •             {  
    •                 XmlElement xe = (XmlElement)xn;  
    •                 xe.RemoveAttribute("genre");//删除genre属性   
    •                 XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点   
    •                 foreach (XmlNode xn1 in nls)//遍历   
    •                 {  
    •                     XmlElement xe2 = (XmlElement)xn1;//转换类型   
    •                     if (xe2.Name == "flag")//如果找到   
    •                     {  
    •                         xe.RemoveChild(xe2);//则删除   
    •                     }  
    •                 }  
    •             }  
    •             xmlDoc.Save("data.xml");   

    6、删除结点

    [c-sharp:nogutter] view plaincopyprint?
    1. XmlDocument xmlDoc = new XmlDocument();  
    2.             xmlDoc.Load("data.xml");  
    •             XmlNode root = xmlDoc.SelectSingleNode("Employees");  
    •             XmlNodeList xnl = xmlDoc.SelectSingleNode("Employees").ChildNodes;  
    •             for (int i = 0; i < xnl.Count; i++)  
    •             {  
    •                 XmlElement xe = (XmlElement)xnl.Item(i);  
    •                 if (xe.GetAttribute("genre") == "张三")  
    •                 {  
    •                     root.RemoveChild(xe);  
    •                     if (i < xnl.Count) i = i - 1;  
    •                 }  
    •             }  
    •             xmlDoc.Save("data.xml");   

    7、按照文本文件读取xml

    [c-sharp:nogutter] view plaincopyprint?
    1. System.IO.StreamReader myFile = new System.IO.StreamReader("data.xml", System.Text.Encoding.Default);  
    2.             //注意System.Text.Encoding.Default   
    •             string myString = myFile.ReadToEnd();//myString是读出的字符串   
    •             this.textBox1.Text = myString;  
    •             myFile.Close();  

     

    8、读取xml

    [c-sharp:nogutter] view plaincopyprint?
    1. //创建XmlDocument对象   
    2. XmlDocument xmlDoc = new XmlDocument();  
    • //载入xml文件名   
    • xmlDoc.Load(filename);   
    • //如果是xml字符串,则用以下形式   
    • xmlDoc.LoadXml(xmldata);   
    • //读取根节点的所有子节点,放到xn0中    
    • XmlNodeList xn0 = xmlDoc.SelectSingleNode("Document").ChildNodes;   
    • //查找二级节点的内容或属性    
    • foreach (XmlNode node in xn0)  
    • {  
    •     if (node.Name == 匹配的二级节点名)  
    •     {  
    •         string innertext = node.InnerText.Trim();//匹配二级节点的内容   
    •         string attr = node.Attributes[0].ToString();//属性   
    •     }   
    • }   
    • 基础的操作就是这些,要是取三级或三级以上的节点,类似推导即可  

    -----------------------------------------------------------------------

    一个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;

    namespace Test
    {
        /// <summary>
        /// XmlHelper 的摘要说明
        /// </summary>
        public class XmlHelper
        {
            public XmlHelper()
            {
            }

            /// <summary>
            /// 读取数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
            /// <returns>string</returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Read(path, "/Node", "")
             * XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")
             ************************************************/
            public static string Read(string path, string node, string attribute)
            {
                string value = "";
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
                }
                catch { }
                return value;
            }

            /// <summary>
            /// 插入数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
            /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
            /// <param name="value">值</param>
            /// <returns></returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Insert(path, "/Node", "Element", "", "Value")
             * XmlHelper.Insert(path, "/Node", "Element", "Attribute", "Value")
             * XmlHelper.Insert(path, "/Node", "", "Attribute", "Value")
             ************************************************/
            public static void Insert(string path, string node, string element, string attribute, string value)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    if (element.Equals(""))
                    {
                        if (!attribute.Equals(""))
                        {
                            XmlElement xe = (XmlElement)xn;
                            xe.SetAttribute(attribute, value);
                        }
                    }
                    else
                    {
                        XmlElement xe = doc.CreateElement(element);
                        if (attribute.Equals(""))
                            xe.InnerText = value;
                        else
                            xe.SetAttribute(attribute, value);
                        xn.AppendChild(xe);
                    }
                    doc.Save(path);
                }
                catch { }
            }

            /// <summary>
            /// 修改数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
            /// <param name="value">值</param>
            /// <returns></returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Insert(path, "/Node", "", "Value")
             * XmlHelper.Insert(path, "/Node", "Attribute", "Value")
             ************************************************/
            public static void Update(string path, string node, string attribute, string value)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    XmlElement xe = (XmlElement)xn;
                    if (attribute.Equals(""))
                        xe.InnerText = value;
                    else
                        xe.SetAttribute(attribute, value);
                    doc.Save(path);
                }
                catch { }
            }

            /// <summary>
            /// 删除数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
            /// <param name="value">值</param>
            /// <returns></returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Delete(path, "/Node", "")
             * XmlHelper.Delete(path, "/Node", "Attribute")
             ************************************************/
            public static void Delete(string path, string node, string attribute)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    XmlElement xe = (XmlElement)xn;
                    if (attribute.Equals(""))
                        xn.ParentNode.RemoveChild(xn);
                    else
                        xe.RemoveAttribute(attribute);
                    doc.Save(path);
                }
                catch { }
            }
        }
    }

    ==================================================

    XmlFile.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <Root />

    ==================================================

    使用方法:

    string xml = Server.MapPath("XmlFile.xml");
    //插入元素
    //XmlHelper.Insert(xml, "/Root", "Studio", "", "");
    //插入元素/属性
    //XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "小路工作室");
    //XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "丁香鱼工作室");
    //XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "谱天城工作室");
    //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Master", "", "红尘静思");
    //插入属性
    //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='小路工作室']", "", "Url", "http://www.wzlu.com/");
    //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "", "Url", "http://www.luckfish.net/");
    //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "", "Url", "http://www.putiancheng.com/");
    //修改元素值
    //XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']/Master", "", "RedDust");
    //修改属性值
    //XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Url", "http://www.putiancheng.net/");
    //XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Name", "PuTianCheng Studio");
    //读取元素值
    //Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site/Master", "") + "</div>");
    //读取属性值
    //Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site", "Url") + "</div>");
    //读取特定属性值
    //Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "Url") + "</div>");
    //删除属性
    //XmlHelper.Delete(xml, "/Root/Studio/Site[@Name='小路工作室']", "Url");
    //删除元素
    //XmlHelper.Delete(xml, "/Root/Studio", "");

  • 相关阅读:
    第十三周课程总结
    第十二周总结
    第十一周课程总结
    python 调用c++ dll 动态库
    c++代码覆盖率工具使用
    基于互联网的高校学生工作管理系统--文献随笔(十八)
    中职学生工作管理系统的研究与实现--文献随笔(十七)
    学生工作管理系统的设计与实现--文献随笔(十六)
    山东青年政治学院学生工作管理信息系统的设计与实现--文献随笔(十五)
    四川职业技术学院辅导员工作管理信息系统的设计与开发--文献随笔(十四)
  • 原文地址:https://www.cnblogs.com/flyinghigher/p/2415635.html
Copyright © 2011-2022 走看看