C# 创建XML文档
- XML文档知识点
- 创建XML文档
- 向XML中追加
- 读取XML文档
- 读取带属性的XML文档
- 删除节点
XML文档知识点
XML 是可扩展的标记语言
XML:用来存储数据
注意点:XML是严格区分大小写的,XML标签也是成对出现的
XML文档有且只能有一个根节点;
当需要往节点里里面添加标签的时候使用InnerXml,添加文本的时候使用InnerText;
元素包含节点
创建XML文档
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace demo20_0801
{
internal class Program
{
static void Main(string[] args)
{
//通过代码来创建XML文档
//1.引用命名空间
//2.创建XML文档对象
XmlDocument doc = new XmlDocument();
//3.创建第一行描述信息,并且添加到doc文档中
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
//4.创建根节点
XmlElement books = doc.CreateElement("Books");
//将根节点添加到文档中
doc.AppendChild(books);
//5.给根节点Books创建子节点
XmlElement book1 = doc.CreateElement("Book");
//将book添加到根节点
books.AppendChild(book1);
//给book1添加子节点
XmlElement name1 = doc.CreateElement("Name");
name1.InnerText = "被讨厌的勇气";
book1.AppendChild(name1);
//给book1添加子节点
XmlElement price1 = doc.CreateElement("Price");
price1.InnerText = "10";
book1.AppendChild(price1);
//给book1添加子节点
XmlElement disc1 = doc.CreateElement("Disc");
disc1.InnerText = "富有哲理且有深度";
book1.AppendChild(disc1);
//给节点添加属性
XmlElement Charactor1 = doc.CreateElement("Charactor");
Charactor1.SetAttribute("人物1","大师");
Charactor1.SetAttribute("人物2", "学者");
book1.AppendChild(Charactor1);
//下面两个节点测试了InnerXml和
XmlElement test1 = doc.CreateElement("test1");
test1.InnerText = "<p>我是一个标签</p>";
book1.AppendChild(test1);
XmlElement test2 = doc.CreateElement("test2");
test2.InnerXml = "<p>我是一个标签</p>";
book1.AppendChild(test2);
doc.Save("Books.xml");//保存xml文档
Console.WriteLine("保存成功");
Console.ReadKey();
}
}
}
创建好的XML文档如下所示:
向XML中追加
追加XML文档,首先要判断XML文档存不存在,存在则加载XML文档并获取根节点,若文件不存在,则创建第一行和根节点。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.IO;
namespace demo21_0801
{
internal class Program
{
//追加XML文档
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
XmlElement books;
if (File.Exists("Books.xml"))
{
//如果文件存在,加载XML
doc.Load("Books.xml");
//获得文件的根节点
books = doc.DocumentElement;
}
else
{
//如果文件不存在,创建第一行
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(xmlDeclaration);
//创建根节点
books = doc.CreateElement("Books");
doc.AppendChild(books);
}
//5.给根节点Books创建子节点
XmlElement book1 = doc.CreateElement("Book");
//将book添加到根节点
books.AppendChild(book1);
//给book1添加子节点
XmlElement name1 = doc.CreateElement("Name");
name1.InnerText = "C#图解教程";
book1.AppendChild(name1);
XmlElement price1 = doc.CreateElement("Price");
price1.InnerText = "10";
book1.AppendChild(price1);
XmlElement disc1 = doc.CreateElement("Disc");
disc1.InnerText = "富有哲理且有深度";
book1.AppendChild(disc1);
doc.Save("Books.xml");
Console.WriteLine("保存成功");
Console.ReadKey();
}
}
}
读取XML文档
读取上述XML文档
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.IO;
namespace demo22_0801
{
internal class Program
{
static void Main(string[] args)
{
//读取XML文档
XmlDocument doc = new XmlDocument();
doc.Load("Books.xml");
//获取文档的根节点
XmlElement books = doc.DocumentElement;
//获得子节点,返回节点的集合
XmlNodeList xmlNodeList = books.ChildNodes;
foreach (XmlNode xmlNode in xmlNodeList)
{
Console.WriteLine(xmlNode.InnerText);
}
Console.ReadKey();
}
}
}
打印出来的内容如下所示:
读取带属性的XML文档
如果读取带有属性的XML文档,文档内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Books>
<Book>
<Charactor name1="大师" name2="学者" />
</Book>
</Books>
读取带有属性的XML文档的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.IO;
namespace demo23_0801
{
internal class Program
{
//读取节点的属性值
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("Books.xml");
//选择节点:
XmlNodeList xmlNodeList = doc.SelectNodes("/Books/Book/Charactor");
foreach (XmlNode node in xmlNodeList)
{
Console.WriteLine(node.Attributes["name1"].Value);
Console.WriteLine(node.Attributes["name2"].Value);
}
Console.ReadKey();
}
}
}
控制台显示内容如下:
删除节点
要删除的XML文档内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Books>
<Book>
<Name>C#图解教程</Name>
<Price>10</Price>
<Disc>富有哲理且有深度</Disc>
</Book>
</Books>
删除节点代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace demo24_0801
{
internal class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("Books.xml");
XmlNode xmlNode = doc.SelectSingleNode("/Books/Book");
//删除Book下面的所有子节点
xmlNode.RemoveAll();
doc.Save("Books.xml");
Console.WriteLine("删除成功");
Console.ReadKey();
}
}
}
删除后的XML文档内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Books>
<Book>
</Book>
</Books>