前言
一、什么是XML?
二、XML格式
1. 相关定义
2. 举例
三、代码实例——创建、保存、读取XML
总结
工作需要,想读取XML文件的内容,在网上找了许多资料,各种类型、方法都有。
自己水平有限,资料里的各种代码拼凑起来也容易有冲突。
所以自己整理了读取XML的简单方法,把代码整理出来。配合一些字符串处理函数,可以处理简单的XML文件。
使用控制台模板,可以直接运行代码。希望对想要快速开发的初学者有所帮助。
关于定义网上有很多,这里摘抄一下:
XML是具有特殊格式的纯文本,具有严格的格式限制,应用非常广。
一个XML文件包含:文档声明、注释、元素、属性、值等。
文档声明:在生成时默认都会自动添加声明,XML主要作用在于读取,因此不常操作。
注释(Comment):相当于XML的标签、注解,可为空。
元素(Element):一个XML必须有且只有一个根元素。通常根元素命名为Root,但是不强制。父元素、子元素、同级元素数量、名称无要求,可重名。
属性(Attribute):对元素提供详细的信息。目前我还没有进一步了解,留个坑。
注意:XML是区分大小写的。
下面举一个简单的例子:
value1
value2
name1
name2
name3
第一行是XML文件的声明,定义了文件的版本(1.0)和使用的编码(utf-8)
第二行是XML的注释行,可为空。
第三行开始是元素的树形结构,根元素Root有且只有一个,其余元素可以有多个分支节点。(元素级别通常也用树形结构的节点作类比)
每个节点都用
如上图,Root根节点下,有一个Element父节点,父节点下还有5个子节点。
代码以Console.WriteLine()函数作为分割,共分成四段:
// 新建一个xml,注意逗号 , 和括号 ) 的包含关系。右括号与该级别语句对齐更直观
XDocument srcTree = new XDocument(
new XComment("This is a comment"),
new XElement("Root",
new XElement("Element1", "value1"),
new XElement("Element2", "value2"),
new XElement("Element3", "value3"),
new XElement("Child", "name1"),
new XElement("Child", "name2"),
new XElement("Child", "name3")
)
);
srcTree.Save(@"D:\test.xml"); // 保存在D盘test.xml
Console.WriteLine("test.xml已保存\n");
Console.WriteLine("------------------------------");
XDocument xDoc = XDocument.Load(@"D:\test.xml"); // 创建xDoc实例重新加载test.xml
//查找Root根节点下的Child元素,遍历后输出,方法1:
var elements = xDoc.Elements("Root").Descendants("Child"); // Descendants()可以遍历内部全部子节点
foreach (var e in elements)
{
Console.WriteLine(e); // 元素和值全部输出
// Console.WriteLine(e.Name); // 只输出元素 Element
// Console.WriteLine(e.Value); // 只输出值 value
}
Console.WriteLine("------------------------------");
// 方法2
var ele = from e in xDoc.Elements("Root").Descendants("Child")
where e.Name == "Child"
select e;
foreach (XElement xyz in ele)
{
Console.WriteLine(xyz);
}
Console.WriteLine("------------------------------");
// 使用新的实例把上面的文档再输出一次,不常用
XDocument srcTreeNew = new XDocument(
new XComment("This is a comment"),
new XElement("Root",
from el in srcTree.Element("Root").Elements()
where ((string)el).StartsWith("value") // 值是以value开头的全部输出
select el
)
);
Console.WriteLine(srcTreeNew);
Console.ReadKey();
运行结果
注:1. 上述代码是写在Main函数中
2. 需要使用 using System.Xml.Linq; 命名空间
写的可能不是很明白,可以把代码运行一下,自己尝试修改代码,对比结果更容易理解一些。
刚开始写技术博客,经验不足。大家也可以借鉴其他的博客和官方文档学习。
关于XML的操作有XDocument(LINQ to XML API)和XMLDocument(经典DOM API)两种方法。
更常用、操作更方便的是前者。具体区别参考:https://www.cnblogs.com/HQFZ/p/4788428.html
LINQ to XML微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.xml.linq.xdocument?view=net-5.0
其他LINQ to XML博客:
https://www.cnblogs.com/rosesmall/p/5577681.html
https://www.cnblogs.com/nsky/archive/2013/03/05/2944725.html#C3