XML(可擴(kuò)展標(biāo)記語言)
在C#中我們常用來當(dāng)做一個(gè)小型的數(shù)據(jù)庫來使用,我們可以將信息保存在XML文檔中,或者從XML文檔中獲取數(shù)據(jù)。這樣就必須使用到XML文檔的數(shù)據(jù)讀取。
XML文檔的讀取有兩種方式:
一、利用XMLReader逐條讀取,通過判斷XML的NodeType屬性來獲取到XML文檔中信息。
示例:設(shè)置可以讀取xml的dtd內(nèi)容
XmlReaderSettings xs=new XmlReaderSettings();
xs.DtdProcessing=DtdProcessing.Parse;
//用xmlreader對象讀取
XmlReader xml = XmlReader.Create("../../Student.xml",xs);
// bool b= xml.Read();//只進(jìn)流的方式讀取節(jié)點(diǎn)
//string n= xml.Name;//讀取的節(jié)點(diǎn)的名稱
//MessageBox.Show(n);
while (xml.Read())
{
string msg = "";
switch (xml.NodeType)
{
case XmlNodeType.Attribute:
msg = "屬性:" + xml.Name;
break;
case XmlNodeType.CDATA:
msg = "CDATA節(jié)點(diǎn):" + xml.Value;
break;
case XmlNodeType.Comment:
msg = "注釋:" + xml.Value;
break;
case XmlNodeType.DocumentType:
msg = "dtd";
break;
case XmlNodeType.Element:
msg = "開始標(biāo)記:" + xml.Name;
break;
case XmlNodeType.EndElement:
msg = "結(jié)束標(biāo)記:" + xml.Name;
break;
case XmlNodeType.Text:
msg = "內(nèi)容:" + xml.Value;
break;
case XmlNodeType.Whitespace:
msg = "空白節(jié)點(diǎn)";
break;
case XmlNodeType.XmlDeclaration:
msg = "xml文件聲明:"+xml.Name;
break;
default:
break;
}
MessageBox.Show(msg);
}
優(yōu)點(diǎn),每次只讀取一條內(nèi)容,比較節(jié)省系統(tǒng)的內(nèi)容,適合大文件的讀取。
二、利用XMLDocument對象一次性將整個(gè)XML文檔加載到內(nèi)存中,形成一個(gè)有層次關(guān)系的DOM樹
示例:
XmlDocument doc = new XmlDocument();
doc.Load("../../Part1.xml");
XmlElement xe = doc.DocumentElement;
foreach (XmlNode item in xe.ChildNodes)
{
string province = item.Attributes["id"].Value.ToString();
comboBox1.Items.Add(province);
}
1)XML文檔新增節(jié)點(diǎn)
XmlDocument xml=new XmlDocument();
xml.load("../../Student.xml");
//創(chuàng)建一個(gè)節(jié)點(diǎn)
XmlNode stnode=xml.CreateElement("節(jié)點(diǎn)一");//這里是需要?jiǎng)?chuàng)建的節(jié)點(diǎn)的名字
//stnode.InnerText="";//這里可以設(shè)置節(jié)點(diǎn)中的文本
XmlAttribute sta=xml.CreateAtrribute("id");//這里 創(chuàng)建了一個(gè)名為id的屬性
stnode.Attributes.Append(sta);//將這個(gè)屬性添加到stnode節(jié)點(diǎn)中
xml.DocumentElement.AppendChild(stuNode)//最后將創(chuàng)建的節(jié)點(diǎn)添加到XML文檔的根節(jié)點(diǎn)中
xml.Save("../../Student.xml");//最后將修改后的XML保存到磁盤中
2)XML文檔修改節(jié)點(diǎn)
和新增一樣,首先我們需要將整個(gè)XML文檔加載到內(nèi)存中。
然后我們需要獲取到需要修改的節(jié)點(diǎn)
XmlNode=xml.selectSingleNode("http://student[@stuNo='"+stuNo+"']");
//xpath 路徑的寫法有兩種 //從跟節(jié)點(diǎn)開始往后寫路徑的寫法叫絕對路徑寫法:/students/student/sex //以"http://"開頭寫路徑的寫法為相對路徑的寫法://student/sex //如果節(jié)點(diǎn)中右屬性就用[ ]括起來
找到這個(gè)節(jié)點(diǎn)之后,重新給節(jié)點(diǎn)的InnerTextX屬性賦值,就可以實(shí)現(xiàn)修改操作。
3)XML文檔刪除操作
首先,我們同樣需要加載XML文檔,然后我們需要獲取到那個(gè)要?jiǎng)h除的節(jié)點(diǎn)。同樣的調(diào)用selectSingleNode方法,
最后我們使用xml.removeChild();就可以將節(jié)點(diǎn)移除,每次做完操作之后都別忘了調(diào)用xml.Save();將操作后的XML文檔保存到磁盤中。
XMLDocument屬性:
DocumentElement 獲取文檔的根 XmlElement。
ChildNodes 獲取節(jié)點(diǎn)的所有子節(jié)點(diǎn)。
HasChildNodes 獲取一個(gè)值,該值指示節(jié)點(diǎn)是否有任何子節(jié)點(diǎn)。
FirstChild 獲取節(jié)點(diǎn)的第一個(gè)子級。
LastChild 獲取節(jié)點(diǎn)的最后一個(gè)子級
NextSibling 獲取緊接在該節(jié)點(diǎn)之后的節(jié)點(diǎn)。
PreviousSibling 獲取緊接在該節(jié)點(diǎn)之前的節(jié)點(diǎn)。
ParentNode 獲取該節(jié)點(diǎn)的父級節(jié)點(diǎn)。
InnerText 獲取或設(shè)置節(jié)點(diǎn)及其所有子節(jié)點(diǎn)的串聯(lián)值。
InnerXml 獲取或設(shè)置表示當(dāng)前節(jié)點(diǎn)子級的標(biāo)記。
Attributes 獲取一個(gè) XmlAttributeCollection,它包含該節(jié)點(diǎn)的屬性。
Value 獲取或設(shè)置節(jié)點(diǎn)的值
Name 獲取節(jié)點(diǎn)的限定名。
LocalName 獲取節(jié)點(diǎn)的本地名稱。
Prefix 獲取或設(shè)置該節(jié)點(diǎn)的命名空間前綴。
AppendChild 將指定的節(jié)點(diǎn)添加到該節(jié)點(diǎn)的子節(jié)點(diǎn)列表的末尾
CreateAttribute 創(chuàng)建具有指定名稱的 XmlAttribute
CreateElement 創(chuàng)建 XmlElement
CreateNode 創(chuàng)建 XmlNode
CreateTextNode 創(chuàng)建具有指定文本的 XmlText
RemoveAll 移除當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)和/或?qū)傩浴?
RemoveChild 移除指定的子節(jié)點(diǎn)。
ReplaceChild 用 newChild 節(jié)點(diǎn)替換子節(jié)點(diǎn) oldChild。
WriteTo 將 XmlDocument 節(jié)點(diǎn)保存到指定的 XmlWriter。
Save 將 XML 文檔保存到指定的位置。
審核編輯 黃宇
-
XML
+關(guān)注
關(guān)注
0文章
187瀏覽量
33022 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4359
發(fā)布評論請先 登錄
相關(guān)推薦
評論