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节点
- 节点包含元素(文本中见到的所有东西都是节点,元素指的是标签)。
- 只能有一个根节点
<?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