第八章 可扩展性标记语言Xml
一、Xml简介
1.什么是Xml?
Xml是一种标记语言,很类似于Html,准确地说Xml是一种可扩展性标记语言。
注意:Xml是不作为的,仅仅是纯文本,任何可以打开txt的工具都可以编辑Xml文件。
2.Xml的作用:被设计用来传输和存储数据。
3.Xml的特点:
①Xml指可扩展性标记语言(Extensible Markup Language);
②Xml是一种标记语言,很类似于Html;
③Xml的设计宗旨是传输和存储数据,而非显示数据;
④Xml标签没有被预定义,需要自行定义标签。
4.Xml语法:
结构:是一个树形结构,树形结构必须存在根标签。
语法规则:
①所有Xml元素都须有关闭标签;
<Student>这是正确的</Student>
<Student>这是错误的<Student>
②Xml区分大小写;
<Student>这是正确的</Student>
<Student>这是错误的</STUDENT>
③Xml必须正确地嵌套;
<b><i>这是正确的</i></b>
<b><i>这是错误的</b></i>
④Xml文档必须有根元素;
<root>
<child>
<subChild>这是正确的</subChild>
</child>
</root>
<child></child>
<subChild>这是错误的</subChild>
⑤Xml的属性值须加引号。
<Day year="2020" month="02" day="25"> <!--这是正确的-->
<Day year=2020 month=02 day=25> <!--这是错误的-->
命名规则:
①由字母、数字、符号组成;
②不能以数字或者标点符号开始;
③名称不能以字符 “xml”(或者 XML、Xml)开始;
④名称不能包含空格。
5.Xml和Html的区别
1.相同点:都是标记语言
2.不同点:
①xml被设计用来传输和储存数据,Html展示美化数据;
②Xml区分大小写,Html不区分大小写;
④Xml的标签是自行定义的,Html的标签是固定的;
⑤Xml的标签必须成双成对,Html允许有单标签,如、。
6.特殊的意义字符
在Xml中,如果将"<"放在xml元素中,会发生错误,这是因为解析器会把他当作新元素的开始。
解决方案:用实体引用来代替特殊的字符。
注意:分号是英文状态下的。
&It; | < | 小于 |
---|---|---|
>; | > | 大于 |
&; | & | 和号 |
&apos; | ’ | 单引号 |
"; | " | 双引号 |
7.注释:
Xml中的注释和Html一样
二、读取Xml文件
1.读取Xml文件的步骤:
前提:导入命名空间System.Xml
①声明XmlDocument对象
XmlDocument myXml=new XmlDocument();
②加载xml文件
myXml.Load(“xml文件路径”);
③读取xml根节点
XmlNode/XmlElement xmlRoot=myXml.DocumentElement;
④遍历子节点
XmlNode/XmlElement
2.XmlNode和XmlElement的区别
相同的属性:
InnertText:获取节点上的文本
Name:获取Xml标签的名称
ChildNodes:得到所有子节点
XmlElement [] :子节点的子节点
Attributes[“key的名字”].Value:拿到属性值
不同点:
①XmlElement独有的属性:GetAttribute(key的名字)拿到属性值;
②XmlNode是抽象类,XmlElement是class
关系:XmlElement是XmlNode的子类
<?xml version="1.0" encoding="UTF-8"?>
<Note>
<Day year="2012" month="3" day="4">
<To>22</To>
<From>sssdd</From>
<Heading>ddd</Heading>
<Message>cccc</Message>
</Day>
</Note>
using System.Xml;
//解析Note.xml
//创建XmlDocument对象
XmlDocument myXml=new XmlDocument();
//加载Xml文件
myXml.Load("Note.xml");
//读取Xml根节点
XmlNode xmlRoot=myXml.DocumentElement;
//遍历子节点
foreach(XmlNode node in xmlRoot.ChildNodes)
{
//得到子节点的子节点的文本
Console.WriteLine(node["From"].InnerText);
//得到属性值
Console.WriteLine(node.Attributes["year"].Value);
}
注意:①加载Xml时候里面的路径可以是绝对路径,也可以将Xml文件放在bin目录下的Debug文件夹下,那么此时的路径直接写上Xml文件名。
②保存Xml文件的时候将文件的编码格式改成"UTF-8",避免出现乱码。
③关于更多的Xml的学习推荐:https://www.w3school.com.cn/xml/index.asp
三、TreeView
1.通过代码绑定节点:
①绑定根节点
1)创建一个TreeView对象
TreeNode rootNode=new TreeNode(“字符串”);
TreeView控件对象.Nodes.Add(rootNode); //这里返回的是一个int值,节点的深度
2)创建一个TreeView对象
TreeNode rootNode;
rootNode=TreeView控件对象.Nodes.Add(“字符串”); //这里返回的是一个节点对象
②绑定子节点
1)TreeNode childNode=new TreeNode (“字符串”);
this.treeview1.rootNode.Nodes.Add(childNode);
2)TreeNode rootNode;
rootNode=this.treeview1.rootNode.Nodes.Add(“字符串”);
③给选中的节点绑定子节点
this.treeview1.SelectedNode.Nodes.Add(childNode);
2.TreeView的属性和事件
属性 | 说明 |
---|---|
Nodes | TreeView控件中的所有树节点 |
Level | 节点的深度,从0开始 |
index | 节点的当前下标,从0开始 |
Text | 节点的文本 |
SelectedNode | 当前选中的节点 |
Tag | 节点的隐藏域 |
事件 | 说明 |
AfterSelect | 节点被选中事件,AfterSelect独有的方法:e.Node—>e---->当前发生的操作 |
3.删除节点:
TreeView控件对象.SelectedNode.Remove(); //删除选中的节点
TreeView控件对象.SelectedNode.Nodes.Clear(); //清空选中的子节点
TreeView控件对象.Nodes.Clear(); //清空所有子节点
第九章 文件操作
一、读取文件
1.读取文件的步骤
前提:导入命名空间System.IO;
①创建文件流
FileStream fs =new FileStream (文件路径,FileMode文件打开方式)
FileMode值:
Create:如果文件不存在,创建一个新文件,如果文件已经存在,则覆盖原有文件;
CreateNew:如果文件不存在,创建一个新文件,如果文件存在则异常;
Open:打开文件,如果不存在则异常;
OpenOrCreate:文件存在则直接打开,文件不存在先创建再打开;
Append:如果文件已经存在则追加到文件末尾,文件不存在则创建文件;
Truncate:打开一个已经存在的文件,清空本来的内容,然后再往里面写内容,如果不存在则异常。
②创建阅读器或写入器
1.阅读器:
1)创建对象
StreamReader sr=new StreamReader(文件流);
StreamReader sr=new StreamReader(文件流,Encoding指定编码格式);
2)方法
String ReadLine();读取一行
String ReadToEnd();从当前位置读取到末尾
Close();关闭
2.写入器:
1)创建对象
StreamWriter sw =new StreamWriter(文件流);
StreamWriter sw =new StreamWriter(文件流,Encoding指定编码格式);
2)方法:
Write(“字符串”);写入不换行
WriteLine(“字符串”);写入换行
Close();关闭
③执行读写操作
④关闭阅读器或写入器
⑤关闭文件流
//执行写入操作
using System.IO;
FileStream fs =new FileStream ("文件路径",FileMode.Append) //追加
StreamWriter sw =new StreamWriter(fs,Encoding.Default)
sw.WriteLine("你好");
sw.Close();
fs.Close();
//执行读取操作
using System.IO;
FileStream fs =new FileStream ("文件路径",FileMode.Open) //打开已经存在的文件
StreamReader sr=new StreamReader(fs,Encoding.Default);
sr.ReadToEnd();
sr.Close();
fs.Close();
2.操作文件和目录
1.文件
File:static类
返回值类型 | 方法名称 | 说明 |
---|---|---|
bool | Exists(文件路径) | 用于检查指定文件是否存在 |
void | Copy(文件源路径,目标路径) | 将指定路径的源文件中的内容复制到目标文件,如果文件不存在,在指定路径新建一个文件 |
void | Move(文件源路径,目标路径) | 将指定文件移到一个新的路径 |
void | Delete(文件路径) | 删除指定的文件,如果指定文件不存在不会引发异常 |
FileInfo:非static类
1.创建对象
FileInfo info =new FileInfo(文件路径); //注意FileInfo没有无参构造函数
2.方法:
返回值类型 | 方法名称 | 说明 |
---|---|---|
void | CopyTo(目标路径) | 将现有文件复制到新文件,不允许覆盖现有文件 |
void | MoveTo(目标路径) | 将指定文件移到一个新位置 |
void | Delete(文件路径) | 永久删除文件 |
3.属性:
返回值类型 | 属性名称 | 说明 |
---|---|---|
long | Length | 文件的大小 |
string | Name | 文件的名称 |
string | Extension | 文件的后缀名称 |
string | FullName | 获取完整目录 |
bool | Exists | 判断文件是否存在 |
2.目录
Directory:static类
方法:
返回值类型 | 方法名称 | 说明 |
---|---|---|
bool | Exists(路径) | 判断指定文件夹是否存在 |
void | Move(源路径,目标路径) | 将指定文件或目录及其内容移到一个新的路径 |
void | Delete(路径,bool) | 删除指定目录,如果bool值为true则删除子目录中的所有目录内容 |
String [] | GetDirectories() | 获取所有子目录 |
String [] | GetFiles() | 获取所有子文件 |
DirectoryInfo:非static类
1.创建
DirectoryInfo info =new DirectoryInfo(path);
2.方法:
返回值类型 | 方法名称 | 说明 |
---|---|---|
void | MoveTo(路径) | 将指定文件或目录及其内容移到一个新的路径 |
void | Delete(路径,bool) | 删除指定目录,如果bool值为true则删除子目录中的所有目录内容 |
DirectoryInfo [] | GetDirectories() | 获取所有子目录 |
FileInfo [] | GetFiles() | 获取所有子文件 |
3.属性
返回值类型 | 属性名称 | 说明 |
---|---|---|
bool | Exists | 判断文件夹是否存在 |
string | Name | 文件夹名称 |
string | Parent | 得到父目录 |
3.静态类和非静态类的区别:
①静态类只能有static成员;非静态类可以包括静态成员,也可以包括非静态成员
②静态类不能new对象,没有构造函数;非静态类可以new对象,有构造函数
③静态类不能被继承;非静态类可以被继承。
4.静态方法:
①在C#中只能用类名调用
②同一个类中直接调用,static不能直接调用非static成员
③static方法中不能用this关键字
5.static关键字:不能修饰局部成员
6.控件介绍
①openFileDialog:选择打开文件,打开一个已经存在的文件;
②saveFileDialog:选择保存文件,输出文件;
③folderBrowserDialog:选择的是一个文件夹[目录]。