XML 基础
- 可扩展标记语言
- 是一种数据语言,用于将数据存储在简单的文本格式里,可以被人类任何计算机理解
- 是一种 W3C 标准,类似 HTML
- 用 XML 声明,XML 名称空间,XML 元素和特征来创建 XML 文档
- XML 声明定义了 XML 版本
- XML 名称空间用于定义词汇表
- XML 元素和特征用于定义 XML 文档的内容
// 基本结构 Beginning Visual C# 2015 Benjamin Perkins et al 096689
JSON基础
// 基本结构{ "book": [{ "title": "Beginning Visual C# 2015", "author": "Benjamin Perkins et al", "code": "096689" }]}
XML 模式
- XML 文档可以用模式类描述
- 模式是另一个XML文件,描述了允许在一个特定的文档中使用的元素和特征
- 可以根据模式验证 XML 文档,确保程序不会遇到不打算处理的数据
- 用于 C# 标准模式 XML 格式是 XSD(XML Schema Definition)
XML 文档对象模型
- Document Object Model
- 一组以非常直观的方式访问和处理 XML 的类
常用的 DOM 类
类名 | 说明 |
XmlNode | 表示文档树中的一个结点,如果是 XML 文档的根,可以从它导航到文档的任意位置 |
XmlDocument | 扩展了XmlNode,通常是使用 XML 的第一个对象,用于加载磁盘或其他地方的数据并在这些位置保存数据 |
XmlElement | 表示 XML 文档中的一个元素,派生自 XmlLinkedNode, XmlLinkedNode 派生于 XmlNode |
XmlAttribute | 表示一个特性,派生于 XmlNode |
XmlText | 表示开始标记和结束标记之间的文本 |
XmlComment | 特殊类型节点,不是文档的一部分,为阅读器提供文档各部分的信息 |
XmlNodeList | 表示一个节点集合 |
XmlDocument
using System.Xml; // 使用前引入XmlDocument document = new XmlDocument();document.Load(@"C:\books.xml");
XmlElement
XmlDocument document = new XmlDocument();document.Load(@"C:\books.xml");XmlElement element = document.DocumentElement; // 返回根结点
XmlElement的属性
属性 | 说明 |
FirstChild | 返回当前节点之后的第一个节点,返回 XmlNode 对象 |
LastChild | 返回当前节点后的最后一个子节点 |
ParentNode | 返回当前节点的父节点 |
NextSibling | 返回有相同父节点的下一个节点 |
HasChildNodes | 检查当前元素是否有子元素 |
修改节点的值
获取结点值的3种方法
属性 | 说明 |
InnerText | 获取当前节点中所有子节点的文本,以一个串联字符串的方式返回 |
InnerXml | 获取当前节点中所有子节点的所有内容 |
Value | 返回当前节点值,适用于 XmlText, XmlComment, XmlAttribute |
插入新节点
用于创建节点的方法
方法 | 说明 |
CreateNode | 创建任意类型的节点 |
CreateElement | 创建 XmlElement 类型的节点 |
CreateAttribute | 创建 XmlAttribute 类型的节点 |
CreateTextNode | 创建 XmlTextNode 类型的节点 |
CreateComment | 创建注释 |
用于插入节点的方法
方法 | 说明 |
AppendChild | 将新节点追加到 XmlNode 类型或其派生类型的节点最后 |
InsertAfter | 新节点插入在参考节点之后 |
InsertBefore | 新节点插入在参考节点前面 |
XmlDocument document = new XmlDocument();document.Load(bookFile);XmlElement root = document.DocumentElement;XmlElement newBook = document.CreateElement("book");XmlElement newTitle = document.CreateElement("title");XmlElement newAuthor = document.CreateElement("author");XmlElement newCode = document.CreateElement("code");XmlText title = document.CreateTextNode("Beginning Visual C# 2015");XmlText author = document.CreateTextNode("Karli Watson et al");XmlText code = document.CreateTextNode("314418");XmlComment comment = document.CreateComment("The previous edition");newBook.AppendChild(comment);newBook.AppendChild(newTitle);newBook.AppendChild(newAuthor);newBook.AppendChild(newCode);newTitle.AppendChild(title);newAuthor.AppendChild(author);newCode.AppendChild(code);root.InsertAfter(newBook, root.LastChild);document.Save(bookFile);
删除结点
用于删除结点的方法
方法 | 说明 |
RemoveAll | 删除节点上的所有子节点,并且删除结点上的所有特性 |
RemoveChild | 删除节点上的一个子节点,返回删除结点 |
选择结点
用于选择节点的方法
方法 | 说明 |
SelectSingleNode | 选择一个节点。如果创建一个查找多个节点的查询,就只返回第一个节点 |
SelectNodes | 以 XmlNodesList 类的形式返回一个节点集合 |
把 XML 转换为 JSON
使用 NewtonsoftJSON.NET 包
string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(document);
用 XPath 搜索 XML
XPath 是XML 文档的查询语言
XPath 的常用操作
目的 | 示例 |
选择当前节点 | . |
选择当前节点的父节点 | .. |
选择当前节点的所有子节点 | * |
选择具有特定名称的所有子节点 | Title |
选择当前节点的指定的一个特征 | |
选择当前节点的所有特性 | |
按照索引选择一个子节点 | element[3] |
选择当前节点的所有文本节点 | text() |
选择当前节点的一个或多个孙子节点 | element/text() |
在文档中选择具有特定名称的所有节点 | //masss |
在文档中选择具有特定名称和特定父节点名称的所有节点 | //element/name |
选择值满足条件的节点 | //element[name='OK'] |
选择特性满足条件的节点 | //element[@firstname='OK'] |
XmlNodeList nodes = document.DocumentElement.SelectNodes(query);