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
原文地址:https://www.cnblogs.com/janghe/p/7677554.html