zoukankan      html  css  js  c++  java
  • C#-XML-数据传输

    http://www.cnblogs.com/fengxuehuanlin/p/5631664.html

    关于xml是属于一个比较重要的东西,在平时开发的过程中,这块内容最主要的是要掌握XML内容的读取和写入操作。

    xml可作为小型数据库用来存储数据。

    html主要用来显示数据,XAML前台设计。

    一.什么是XML?

    • XML 指可扩展标记语言(EXtensible Markup Language)--可扩展意味着标签可以自定义,不像html固定标签。
    • XML 是一种标记语言,很类似HTML
    • XML 的设计宗旨是传输数据,而非显示数据
    • XML 标签没有被预定义,您需要自行定义标签
    • XML 被设计为具有自我描述性
    • XML 是W3C 的推荐标准

    二.XML语法:

    1.一个XML包含以下几部分内容:

    文档声明,元素,属性,注释,CDATA(特殊字符),处理指令,node节点

    • 节点包含元素(文本中见到的所有东西都是节点,元素指的是标签)。
    • 只能有一个根节点
    2.最简单的声明格式     
    <?xml version="1.0" ?>
    用encoding属性声明文档的编码     
    <?xml version="1.0" encoding="UTF-8" ?>
    用standalone属性说明文档是否独立     
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 

    三、写入XML内容:

    • dom-document object model(XmlDocument文档对象),注意必须先有一个根节点。
    //通过代码来创建XML文档
                //1、引用命名空间
                //2、创建XML文档对象
                XmlDocument doc = new XmlDocument();
                //3.创建第一行描述信息,添加到doc文档中
               XmlDeclaration dec= doc.CreateXmlDeclaration("1.0", "utf-8", null);
                doc.AppendChild(dec);
    
                //4.创建根节点
                XmlElement siemens = doc.CreateElement("Siemens");
                doc.AppendChild(siemens);
                
    
                //5.给根节点books创建子节点
                XmlElement opcua = doc.CreateElement("OPCUA");
                siemens.AppendChild(opcua);
    
                //6.给book1添加子节点
                XmlElement plc1 = doc.CreateElement("PLC1");
                plc1.InnerText = "_84303";
                opcua.AppendChild(plc1);
    
                XmlElement plc2 = doc.CreateElement("PLC2");
                plc2.InnerText = "_87303";
                opcua.AppendChild(plc2);
    
                XmlElement plc3 = doc.CreateElement("PLC3");
                plc3.InnerText = "_89303";
                opcua.AppendChild(plc3);
    
                XmlElement plc4 = doc.CreateElement("PLC4");
                plc4.InnerXml = "<a>我就发而非</a>";
                opcua.AppendChild(plc4);
    
                XmlElement plc4_1 = doc.CreateElement("年级");
                plc4_1.SetAttribute("名字","小明");
                plc4_1.InnerXml = "学前班";
                plc4.AppendChild(plc4_1);
                doc.Save("Siemens.xml");

     

     XmlDocument doc2 = new XmlDocument();
                XmlDeclaration des2 = doc2.CreateXmlDeclaration("1.0","utf-8",null);
                doc2.AppendChild(des2);
    
                XmlElement person = doc2.CreateElement("Person");
                doc2.AppendChild(person);
    
                for(int i=0;i<lstudent.Count;i++)
                {
                    XmlElement student = doc2.CreateElement("Studemt");
                    student.SetAttribute("ID",lstudent[i].id.ToString());
                    XmlElement name = doc2.CreateElement("Name");
                    name.InnerXml = lstudent[i].name;
                    XmlElement age = doc2.CreateElement("Age");
                    age.InnerXml = lstudent[i].age.ToString();
                    XmlElement gender = doc2.CreateElement("Gender");
                    gender.InnerXml = lstudent[i].gender.ToString();
    
                    person.AppendChild(student);
                    student.AppendChild(name);
                    student.AppendChild(age);
                    student.AppendChild(gender);
                }
    
                doc2.Save("student.xml");

    四.XML文件的读取:

    xml文件内容:

    <?xml version="1.0" encoding="utf-8"?>
    <library id="30">
      <BOOK id="20">
        <name>高等数学</name>
        <name1>大学英语</name1>
      </BOOK>
    </library>

    读取XML内容:

    static void Main(string[] args)
     {
         //将XML文件加载进来
         XDocument document = XDocument.Load("D:\123.xml");
         //获取到XML的根元素进行操作
         XElement root= document.Root;
         XElement ele= root.Element("BOOK");
         //获取name标签的值
         XElement shuxing= ele.Element("name");
         Console.WriteLine(shuxing.Value);
         //获取根元素下的所有子元素
         IEnumerable<XElement> enumerable = root.Elements();
         foreach (XElement item in enumerable)
         {
             foreach (XElement item1 in item.Elements())
             {
                 Console.WriteLine(item1.Name);   //输出 name  name1            
             }
             Console.WriteLine(item.Attribute("id").Value);  //输出20
         }   
         Console.ReadKey();
     }

    五、增删改查

      #region 增删改查
                XmlDocument doc3 = new XmlDocument();
                if(File.Exists("student.xml"))
                {
                    //存在
                    //加载文件
                    doc3.Load("student.xml");
                    //追加,先要拿到根节点
                    XmlElement Person = doc3.DocumentElement;
                    #region 增加
                    ////追加子节点
                    //XmlElement student = doc3.CreateElement("Student");
                    //student.SetAttribute("ID","5");
                    //Person.AppendChild(student);
                    //XmlElement ignore = doc3.CreateElement(".....");
                    //student.AppendChild(ignore);
                    #endregion
                    #region 改查
                    //改查1--获取子节点的方法
                    //XmlNodeList ndoes = Person.ChildNodes;
                    //foreach(XmlNode xnode in ndoes)
                    //{
                    //    //不包含属性 
                    //    Console.WriteLine(xnode.InnerText);
                    //    //属性信息
                    //    Console.WriteLine(xnode.Attributes["ID"].Value);
                    //    if(xnode.Attributes["ID"].Value=="3")
                    //    {
                    //        xnode.Attributes["ID"].Value = "改";
                    //    }
                    //}
                    //改查2---xmlpath的方法
                    XmlNode node = Person.SelectSingleNode("/Person/Student");
                    Console.WriteLine(node.InnerText);
    
                    //直接找某一个子节点
                    XmlNode node1 = Person.SelectSingleNode("/Person/Student[@ID='2']/Gender");
                    node1.InnerText = "不男不女";
                    Console.WriteLine(node1.InnerText);               
                    Console.ReadKey();
                    #endregion 改查
                    #region 删除
                    //根节点不能删除
                   // doc3.RemoveAll();
                    
                    //移除的节点必须是操作节点的子集
                    XmlNode node2 = Person.SelectSingleNode("/Person/Student[@ID='2']/Gender");
                    //Person.RemoveChild(node2);
                    XmlNode nodep = Person.SelectSingleNode("/Person/Student[@ID='2']/");
                    nodep.RemoveChild(node2);
    
                    //移除属性
                    nodep.Attributes.RemoveNamedItem("ID");
                    #endregion
    
                }
                else
                {
                    //不存在
                    XmlDeclaration des3 = doc3.CreateXmlDeclaration("1.0", "utf-8", null);
                    doc3.AppendChild(des3);
                    //添加根节点
                    XmlElement person3 = doc3.CreateElement("Person");
                    doc3.AppendChild(person3);
    
                }
    
                doc3.Save("student.xml");
                #endregion
  • 相关阅读:
    poj 2763 Housewife Wind
    hdu 3966 Aragorn's Story
    poj 1655 Balancing Act 求树的重心
    有上下界的网络流问题
    URAL 1277 Cops and Thieves 最小割 无向图点带权点连通度
    ZOJ 2532 Internship 网络流求关键边
    ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
    SGU 438 The Glorious Karlutka River =) 拆点+动态流+最大流
    怎么样仿写已知网址的网页?
    5-10 公路村村通 (30分)
  • 原文地址:https://www.cnblogs.com/janghe/p/7677554.html
Copyright © 2011-2022 走看看