XML可扩展标记语言标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言

什么是XML,学他有什么用?

优点:容易读懂,格式标准任何语言都内置了XML分析引擎,不用单独进行文件分析引擎得编写。

XML语法规范:标签(Tag)、嵌套(Nest)、属性。标签要闭合,属性值要用””包围,标签可以相互嵌套。

大小写敏感。

XML树,父节点、子节点、兄弟节点。

写入一个XML文件

//1、创建一个XML文档对象

XmlDocument doc = new XmlDocument();

//2、创建第一行描述信息

XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);

//3、将创建的第一行数据添加到文档中

doc.AppendChild(dec);

//4、给文档添加根节点

XmlElement books = doc.CreateElement("Books");

//5、将根节点添加给文档对象

doc.AppendChild(books);

//6、给根节点添加子节点

XmlElement book1 = doc.CreateElement("Book");

//将子节点book1添加到根节点下

books.AppendChild(book1);

//7、给book1添加子节点

XmlElement bookName1 = doc.CreateElement("BookName");

//8、设置标签中显示的文本

bookName1.InnerText = "水浒传";

book1.AppendChild(bookName1);

XmlElement author1 = doc.CreateElement("Author");

author1.InnerText = "<authorName>匿名</authorName>";

book1.AppendChild(author1);

XmlElement price1 = doc.CreateElement("Price");

price1.InnerXml = "<authorName>匿名</authorName>";

book1.AppendChild(price1);

XmlElement des1 = doc.CreateElement("Des");

des1.InnerXml = "好看,顶!~!!!!";

book1.AppendChild(des1);

Console.WriteLine("保存成功");

doc.Save("Book.xml");

演示结果:

<?xml version="1.0" encoding="utf-8" ?>

<Books>

<Book>

<BookName>水浒传</BookName>

<Author>XXX</Author>

<Price>100RMB</Price>

<Des>好看!!经典!!!!顶!!!!</Des>

</Book>

<Book>

<BookName>三国演义</BookName>

<Author>XXX</Author>

<Price>200RMB</Price>

<Des>好看,顶!!!!</Des>

</Book>

</Books>

添加带属性的XML文档

XmlDocument doc = new XmlDocument();

XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);

doc.AppendChild(dec);

XmlElement order = doc.CreateElement("Order");

doc.AppendChild(order);

XmlElement customerName = doc.CreateElement("CustomerName");

customerName.InnerXml = "刘洋";

order.AppendChild(customerName);

XmlElement orderNumber = doc.CreateElement("OrderNumber");

orderNumber.InnerXml = "10000";

order.AppendChild(orderNumber);

XmlElement items = doc.CreateElement("Items");

order.AppendChild(items);

XmlElement orderItem1 = doc.CreateElement("OrderItem");

orderItem1.SetAttribute("Name", "码表");

orderItem1.SetAttribute("Count", "100001");

items.AppendChild(orderItem1);

XmlElement orderItem2 = doc.CreateElement("OrderItem");

orderItem2.SetAttribute("Name", "雨衣");

orderItem2.SetAttribute("Count", "1");

items.AppendChild(orderItem2);

doc.Save("Order.xml");

文档对象模型

对象实体:

Public class Student

{

public int Age { get; set; }

public string Name { get; set; }

public int ID { get; set; }

public char Gender { get; set; }

}

List<Student> list = new List<Student>();

list.Add(new Student() { ID = 1, Name = "yhb", Gender = '男', Age = 30 });

list.Add(new Student() { ID = 2, Name = "wl", Gender = '女', Age = 20 });

list.Add(new Student() { ID = 3, Name = "刘德华", Gender = '男', Age = 50 });

list.Add(new Student() { ID = 4, Name = "张学友", Gender = '男', Age = 60 });

list.Add(new Student() { ID = 5, Name = "哥哥", Gender = '男', Age = -10 });

XmlDocument doc = new XmlDocument();

XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);

doc.AppendChild(dec);

XmlElement person = doc.CreateElement("Person");

doc.AppendChild(person);

//通过循环List集合,获得所有对象 以节点的形式添加到XML文档中

for (int i = 0; i < list.Count; i++)

{

XmlElement student = doc.CreateElement("Student");

student.SetAttribute("studentID", list[i].ID.ToString());

XmlElement name = doc.CreateElement("Name");

name.InnerXml = list[i].Name;

XmlElement age = doc.CreateElement("Age");

age.InnerXml = list[i].Age.ToString();

XmlElement gender = doc.CreateElement("Gender");

gender.InnerXml = list[i].Gender.ToString();

//添加

person.AppendChild(student);

student.AppendChild(name);

student.AppendChild(age);

student.AppendChild(gender);

}

doc.Save("Student.xml");

对xml文档实现增删改查

//XMLDocument

#region 对xml文档实现追加的需求

XmlDocument doc = new XmlDocument();

//首先判断xml文档是否存在 如果存在 则追加  否则创建一个

if (File.Exists("Student.xml"))

{

//加载进来

doc.Load("Student.xml");

//追加

//获得根节点 给根节点添加子节点

XmlElement person = doc.DocumentElement;

XmlElement student = doc.CreateElement("Student");

student.SetAttribute("studentID", "10");

person.AppendChild(student);

XmlElement name = doc.CreateElement("Name");

name.InnerXml = "我是新来哒";

student.AppendChild(name);

XmlElement age = doc.CreateElement("Age");

age.InnerXml = "18";

student.AppendChild(age);

XmlElement gender = doc.CreateElement("Gender");

gender.InnerXml = "女";

student.AppendChild(gender);

}

else

{

//不存在

XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);

doc.AppendChild(dec);

XmlElement person = doc.CreateElement("Person");

doc.AppendChild(person);

XmlElement student = doc.CreateElement("Student");

student.SetAttribute("studentID", "110");

person.AppendChild(student);

XmlElement name = doc.CreateElement("Name");

name.InnerXml = "张三三李思思";

student.AppendChild(name);

XmlElement age = doc.CreateElement("Age");

age.InnerXml = "28";

student.AppendChild(age);

XmlElement gender = doc.CreateElement("Gender");

gender.InnerXml = "男";

student.AppendChild(gender);

}

doc.Save("Student.xml");

Console.WriteLine("保存成功");

#endregion

#region 读取XML文档

XmlDocument doc = new XmlDocument();

doc.Load("OrDER.xml");

还是 先获得根节点

XmlElement order = doc.DocumentElement;

获得根节点下面的所有子节点

XmlNodeList xnl = order.ChildNodes;

foreach (XmlNode item in xnl)

{

Console.WriteLine(item.InnerText);

}

XmlElement items = order["Items"];

XmlNodeList xnl2 = items.ChildNodes;

foreach (XmlNode item in xnl2)

{

Console.WriteLine(item.Attributes["Name"].Value);

Console.WriteLine(item.Attributes["Count"].Value);

if (item.Attributes["Name"].Value == "手套")

{

item.Attributes["Count"].Value = "新来哒";

}

}

doc.Save("OrDER.xml");

#endregion

#region 使用XPath的方式来读取XML文件

XmlDocument doc = new XmlDocument();

doc.Load("order.xml");

//获得根节点

XmlElement order = doc.DocumentElement;

XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");

Console.WriteLine(xn.Attributes["Name"].Value);

xn.Attributes["Count"].Value = "woshi new";

doc.Save("order.xml");

Console.WriteLine("保存成功");

#endregion

XmlDocument doc = new XmlDocument();

doc.Load("order.xml");

//doc.RemoveAll();不行 根节点不允许删除

XmlElement order = doc.DocumentElement;

order.RemoveAll(); 移除根节点下的所有子节点

XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");

//让orderItem去删除属性

XmlNode orderItem = order.SelectSingleNode("/Order/Items/OrderItem");

//获得Items节点

XmlNode items = order["Items"];//order.SelectSingleNode("/Order/Items");

items.RemoveChild(xn); //移除当前节点

//orderItem.RemoveAttributeNode(xn.Attributes["Count"]);

xn.Attributes.RemoveNamedItem("Count");

doc.Save("order.xml");

Console.WriteLine("删除成功");

本篇就到这里了,最后打个小广告:QQ群: .NET 一步步一幕幕  群号:590170361 (加群备注:博客园看到的)

.NET 基础 一步步 一幕幕[XML基础操作]的更多相关文章

  1. .NET 基础 一步步 一幕幕 [.NET基础知识点]

    .NET基础知识点   l  .Net平台  .Net FrameWork框架   l  .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转   l  两种交 ...

  2. .NET 基础一步步一幕幕[面向对象前言]

    面向对象前言 2017年的第一篇博文,好久不写博文了,赶紧补上,感觉在以前的<.NET 基础一步步一幕幕>系列博客中,简短的小知识点已经介绍的差不多的(PS:如果还有别的基础知识点我没有介 ...

  3. .NET 基础 一步步 一幕幕 [前言]

    .NET 基础 一步步 一幕幕 [前言部分] 本人小白一枚,虽然说从去年就开通博客了,到现在也没有写多少东东,虽然工作了,也没有更好得总结.故此重新祭出博客园法宝,修炼技术,争取早日走上大神之位. 故 ...

  4. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  5. .NET 基础 一步步 一幕幕 [.NET 简介]

    .NET 简介 .NET是 Microsoft XML Web services 平台.是微软用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented ar ...

  6. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  7. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  8. .NET 基础 一步步 一幕幕 [.NET 系列预热]

    .NET 系列预热 .NET : 一般指.Net Framework框架.一种平台,一种技术. .NET 下的编程语言有C#,F#,VB:在这里我们主要讲述的C#. .NET 一般都能干什么呢? l  ...

  9. .NET 基础 一步步 一幕幕[面向对象之new、this关键字]

    经常会有人问:小伙子,有没有对象啊,要不要大叔我帮你介绍一个啊,小伙子会说:大叔,不用我自己new一个就好了.(PS:活该你没有对象) 上边当然是一个段子咯,程序员那会没有对象,自己new一个就有了啊 ...

随机推荐

  1. visual studio for mac 安装文件

    安装步骤参考: http://jingyan.baidu.com/article/00a07f3869b81082d028dca8.html 所需安装文件:[注 我只下载了javajdk, 需要and ...

  2. BZOJ 1208 [HNOI2004]宠物收养所:Splay(伸展树)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 题意: 有一个宠物收养所,在接下来一段时间内会陆续有一些宠物进到店里,或是一些人来领 ...

  3. html5--1.20 课程小结与若干点补充

    html5--1.20 课程小结与若干点补充 学习要点: 1.第一章HTML5基础知识做一个小结2.对本章课程中部分内容做几点补充 课程小结 对本章的知识点做一个简单的回顾,并对其中个别知识点做若干补 ...

  4. codeforces 659G G. Fence Divercity(dp)

    题目链接: G. Fence Divercity time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  5. leetcode 303. Range Sum Query - Immutable(前缀和)

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  6. CodeForces - 884F :Anti-Palindromize(贪心&费用流)

    A string a of length m is called antipalindromic iff m is even, and for each i (1 ≤ i ≤ m) ai ≠ am - ...

  7. python爬虫知识点总结(一)库的安装

    环境要求: 1.编程语言版本python3: 2.系统:win10; 3.浏览器:Chrome68.0.3440.75:(如果不是最新版有可能影响到程序执行) 4.chromedriver2.41 注 ...

  8. 误删除$ORACLE_HOME/dbs下的参数文件、密码文件,如何快速重建

    [oracle@11g dbs]$ pwd/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs[oracle@11g dbs]$ lltotal 24 ...

  9. BZOJ3772:精神污染

    浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.p ...

  10. Source insight 支持汇编

    把uboot代码添加到SI的项目里面,打开*.S的文件的时候,发现还是黑白色的,感觉很不舒服,我使用的SI的版本是: ver 3.50,通过百度,找到了解决的办法,方法如下: 1:想让*.s 或者 * ...