1.什么是xml?
Xml(Extensible Markup Language),可擴(kuò)展標(biāo)記語言,一種用于存儲(chǔ)數(shù)據(jù)或傳輸數(shù)據(jù)的標(biāo)記語言,由萬維網(wǎng)(W3C開發(fā))。它允許開發(fā)人員創(chuàng)建自己的標(biāo)記,且簡單易讀,易擴(kuò)展,支持標(biāo)準(zhǔn)的字符編碼,如UFT-8,UTF-16.
2. Xml文檔的基本結(jié)構(gòu)
2.1文檔聲明,包括文檔版本(version)、編碼格式(encoding).
<?xml version = “1.0”,encoding = “UTF-8”?>
2.2根元素(root element)
Xml文檔必須包含一個(gè)根元素,其是xml文檔所有元素的父元素,如:
<root>
? <!--其他元素-->
</root>
2.3元素(element)
是xml文檔的基本單位,包含文本和屬性,元素用標(biāo)簽來標(biāo)識(shí),由<p>開始,</p>結(jié)束,如:
<p>這是一個(gè)段落</p>
2.4屬性(property)
屬性是元素的附加信息,屬性在開始標(biāo)簽中定義,并以鍵值對(duì)的形式出現(xiàn).如:
<p link = “www.baidu.com”這是一個(gè)鏈接/p>
2.5注釋(Comment)
注釋用于在xml文檔中添加解釋和說明,格式以<!--
開始,以-->
結(jié)束, 如下:
<!--這是我的注釋-->
3.C#對(duì)xml文檔的抽象
C#對(duì)xml文件進(jìn)行了結(jié)構(gòu)的抽象,支持xml文檔的創(chuàng)建、讀、寫等操作.
3.1 xml文檔被抽象成XmlDocument對(duì)象,Xml文檔對(duì)象可以用XmlReader和XmlWriter類對(duì)xml文件對(duì)象進(jìn)行讀寫
3.2 xml文檔的元素
被抽象為XmlElement對(duì)象,這些對(duì)象包含了元素的名稱,屬性,子元素
3.3 xml文檔的屬性
XmlAttribute包含了元素的屬性名稱和值
3.4Xml文檔的文本內(nèi)容
XmlText對(duì)象訪問文本內(nèi)容
3.5xml節(jié)點(diǎn)處理
XmlNodelist,XmlNodeReader,XmlNodeWriter,用于xml文檔的節(jié)點(diǎn)列表,讀取,寫入xml節(jié)點(diǎn).
以上的類都在System.Xml命名空間下,需要引入.
4.創(chuàng)建xml文件的demo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _1.創(chuàng)建xml
{
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
//定義xml聲明信息
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
//xml聲明信息添加到文檔對(duì)象下
doc.AppendChild(dec);
//給xml文檔聲明行添加注釋
doc.AppendChild(doc.CreateComment("line above is the declaration for the xml document"));
//創(chuàng)建根元素的注釋
XmlNode com = doc.CreateComment("line below is the root element");
doc.AppendChild(com);
//創(chuàng)建根節(jié)點(diǎn)
XmlElement root = doc.CreateElement("Root");
//將創(chuàng)建的Root元素添加到xml文檔的根節(jié)點(diǎn)中
doc.AppendChild(root);
//循環(huán)添加多個(gè)結(jié)構(gòu)相同的節(jié)點(diǎn)
int subnodeCnt = 6;
//定義隨機(jī)數(shù)對(duì)象,用于產(chǎn)生年齡
Random rdm = new Random();
for (int i = 0; i < subnodeCnt; i++)
{
//創(chuàng)建當(dāng)前元素的注釋
XmlComment comment = doc.CreateComment($"這是第{i + 1}個(gè)子節(jié)點(diǎn)");
//將注釋添加到root下面
root.AppendChild(comment);
//創(chuàng)建當(dāng)前元素
XmlElement element = doc.CreateElement($"學(xué)生{i + 1}");
//給當(dāng)前元素添加屬性,如果當(dāng)前元素沒有ID屬性,則添加ID屬性;如果當(dāng)前元素有ID屬性,則更新ID屬性的值
element.SetAttribute("ID", $"{i + 100}");
//給當(dāng)前元素添加子元素,描述學(xué)生姓名信息
XmlElement name = doc.CreateElement("name");
name.InnerText = $"學(xué)生{i+1}";
element.AppendChild(name);
//給當(dāng)前元素添加子節(jié)點(diǎn),描述學(xué)生的年齡信息
XmlElement age = doc.CreateElement("Age");
age.InnerText = $"{rdm.Next(12, 19)}";
element.AppendChild(age);
//創(chuàng)建當(dāng)前元素到根目錄下
root.AppendChild(element);
}
doc.Save(@"D:\dwang\myxml.xml");
}
}
}
.5.讀取xml文檔demo文章來源:http://www.zghlxwxcb.cn/news/detail-844898.html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _2.讀取x_m_l
{
class Program
{
static void Main(string[] args)
{
int i = 1;
string path = $@"D:\dwang\myxml{i}.xml";
XmlDocument doc = new XmlDocument();
doc.Load(path);
//獲取根節(jié)點(diǎn)
XmlElement root = doc.DocumentElement;
//獲取子節(jié)點(diǎn)(XmlNode是xmlElement,xmlComment的父類)
foreach (XmlNode student in root.ChildNodes)
{
//忽略xml文件中的注釋節(jié)點(diǎn)(XmlComment)
if (student as XmlElement == null)
continue;
Console.Write($"{student.Name}--{((XmlElement)student).GetAttribute("name")}");
foreach (XmlElement subnode in student.ChildNodes)
{
Console.Write($"--{subnode.Name}--{subnode.InnerText}");
}
Console.Write("\r\n");
}
Console.ReadKey();
}
}
}
6.修改xml文檔的demo,包括更新節(jié)點(diǎn),添加節(jié)點(diǎn),刪除節(jié)點(diǎn)等.文章來源地址http://www.zghlxwxcb.cn/news/detail-844898.html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _3.修改xml
{
class Program
{
static void Main(string[] args)
{
//添加節(jié)點(diǎn),修改節(jié)點(diǎn),刪除節(jié)點(diǎn)
XmlDocument doc = new XmlDocument();
//加載xml文檔
string path = $@"D:\dwang\myxml1.xml";
doc.Load(path);
//獲取根節(jié)點(diǎn)
XmlElement root = doc.DocumentElement;
//獲取根節(jié)點(diǎn)名稱
string name_RootNode = root.Name;
//添加節(jié)點(diǎn)
XmlElement newStudent = doc.CreateElement("newStuent");
//設(shè)置newStuent元素的屬性
newStudent.SetAttribute("ID", "888");
//添加newStuent元素的子節(jié)點(diǎn)name,age
XmlElement name = doc.CreateElement("name");
name.InnerText = "newstuentName";
newStudent.AppendChild(name);
XmlElement age = doc.CreateElement("age");
age.InnerText = "68";
newStudent.AppendChild(age);
//將新學(xué)生元素添加到根節(jié)點(diǎn)最后一個(gè)子元素后面
root.InsertAfter(newStudent, root.ChildNodes[root.ChildNodes.Count-1]);
//刪除指定的節(jié)點(diǎn)兩種常用方式(XPath)
//刪除指定的節(jié)點(diǎn)兩種常用方式(XPath)
//方式1
XmlNode node1 = doc.SelectSingleNode(@"/Root/學(xué)生1");//注意節(jié)點(diǎn)的大小寫,否則會(huì)找不到節(jié)點(diǎn)
XmlNode node1_parent = node1?.ParentNode;
node1_parent?.RemoveChild(node1);//獲取指定的節(jié)點(diǎn)后,要用該節(jié)點(diǎn)的父節(jié)點(diǎn)對(duì)象刪除該節(jié)點(diǎn)
//方式2
XmlNode node = root.SelectSingleNode("http://學(xué)生2");
if(node != null)
root?.RemoveChild(node);
//更新xml節(jié)點(diǎn)信息
//獲取指定節(jié)點(diǎn)元素
XmlElement student3 = doc.SelectSingleNode(@"/Root/學(xué)生3") as XmlElement;
//更新ID屬性值
student3?.SetAttribute("ID", "000001");
//設(shè)置當(dāng)前節(jié)點(diǎn)的指定子節(jié)點(diǎn)的innerText
if (student3 != null)
{
student3["Age"].InnerText = "28";
student3["name"].InnerText = "Student--3";
}
//保存xml文檔
doc.Save(path);
}
}
}
到了這里,關(guān)于XML的基礎(chǔ)知識(shí)及XMl文件的創(chuàng)建/讀取/更新demo詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!