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=;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

C#-XML-数据传输的更多相关文章

  1. iOS网络编程解析协议二:XML数据传输解析

    XML两种解析方式,一种是SAX,NSXMLParser是SAX方法解析,另一种是DOM(Document Object Model); 区别: SAX: 只能读,不能修改,只能顺序访问,适合解析大型 ...

  2. xml数据传输

  3. Xml 学习

    XML概述 XML的历史背景 GML(1969):通用标记语言 IBM公司的一些专家们一起研究的一个课题: 软件必须有高度的可移植性,而且必须有一个统一的标准.为了实现软件的一处编写多处运行这个愿景所 ...

  4. 第70节:Java中xml和tomcat

    第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...

  5. Java HttpClient Post请求参数格式为XML

    1.最近忙着做一个接口,拿到文档的时候,what?我当时就震惊了,全都是XML数据传输. 我当时就懵了,哎没得办法,在暑假传输这方面笔者比较熟练json格式数据,简单易懂啊 那就学呗. 2.我在使用的 ...

  6. XML学习笔记--背诵版

    前言 一直想系统性的学XML,就没时间学,今晚抽出几个小时时间学完了XML.过几天再过来看看,背一背应该就差不多,记得东西较多,没什么难理解的. XML数据传输格式 第一章 XML概述 1.1 引入 ...

  7. 开源Jabber(XMPP) IM服务器介绍

    一.摘要 这是我粗略读了一遍Jabber协议和相关技术文章后的产物,有些地方不一定准确.在文章中引用的一些代码来自www.jabber.org上的文章. 二. 什么是Jabber    Jabber就 ...

  8. iOS之即时通讯相关理解

    Socket: 1>Socket又称"套接字" 2>网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 3>应用程序通常通 ...

  9. Ajax 学习总结

    Ajax 技术在 JavaWeb 应用中随处可见,比如购物车中根据商品数量及时更新等应用,那么我们今天就来说说 Ajax 的一些小应用! Ajax 技术也就是允许浏览器与服务器通信而无需刷新当前页面, ...

  10. iOS - IM 即时通讯

    1.即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息.文件.语音与视频交流. 即时通讯在开发中使用的场景 ...

随机推荐

  1. Gradle学习系列(三)

    上一篇我们已经学习了 Gradle 打包,那么这一节 就开始讲讲本章的第二版块:打包及使用Gradle过程中的常见错误问题. 有时候我们需要编辑一个开源项目之类的,希望把它导入了我们自己的IDE工具中 ...

  2. Mac OS 10.12后Caps lock(大写键)无法使用的解决办法

    ▲打开设置中的键盘选项,并切换至输入源选项标签, ▲取消勾选“使用大写锁定键来回切换“美国英文””, ▲这时再按下Caps lock即可正常使用大小写切换. ▲Update:目前macOS 10.12 ...

  3. 【转】Python格式化字符串str.format()

    原文地址:http://blog.xiayf.cn/2013/01/26/python-string-format/ 每次使用Python的格式字符串(string formatter),2.7及以上 ...

  4. (转)MySQL高可用解决方案

    MySQL高可用解决方案 原文:http://www.ywnds.com/?p=5565 有这么两个概念,数据库的可靠性和数据库的可用性,可靠性指的是数据可靠,而可用性指的是服务可用.但是不管是可靠性 ...

  5. 深度学习(四) softmax函数

    softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素 ...

  6. C#(winform)的label自动换行

    Label 是没有自动换行属性的,不像Textbox有WordWrap属性 尽管没有自动换行的属性,但也能够自动换行, 首先 AutoSize改成false; 然后调整 Label的大小,长和宽 (也 ...

  7. Redis的master/slave复制

    摘自:Redis的master/slave复制 Redis的master/slave数据复制方式可以是一主一从或者是一主多从的方式,Redis在master是非阻塞模式,也就是说在slave执行数据同 ...

  8. Scrum 冲刺博客第三篇

    一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 基本的页面设计 各个页面之间的跳转 背景音乐模块设计 今天计划完成的工作 ...

  9. 将一个表的数据导入到另一个表的sql

    ALTER PROCEDURE [dbo].[usp_ea_Copy] ( @eaId int, @createdBy varchar(), @newEaId int output ) AS decl ...

  10. spring之validation校验

    对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提 ...