在開發(fā)過程中,我們有時會需要保存到本地一些結(jié)構(gòu)化數(shù)據(jù)或者配置信息,這時就可以選擇用xml文件。當(dāng)然xml的用途也不僅僅是這些。
這一篇來談一談關(guān)于讀取xml文件的幾種方式;
我們有以下兩個文件,一個是帶有id屬性的,一個是不帶屬性的簡單xml文件。
<?xml version="1.0" encoding="utf-8" ?>
<studentList>
<student>
<name>張三</name>
<sex>男</sex>
<old>20</old>
</student>
<student>
<name>李四</name>
<sex>女</sex>
<old>21</old>
</student>
</studentList>
<?xml version="1.0" encoding="utf-8" ?>
<studentList>
<student>
<name id="1">張三</name>
<sex id="11">男</sex>
<old id="111">20</old>
</student>
<student>
<name id="2">李四</name>
<sex id="22">女</sex>
<old id="222">21</old>
</student>
</studentList>
第一種方式:DataSet讀取
這種方式最簡單,而且取數(shù)據(jù)也很方便,但是對于比較復(fù)雜的xml,操作起來也很麻煩,每一個帶屬性的節(jié)點(diǎn)都會生成一個table,可以自行監(jiān)視下DataSet的結(jié)構(gòu)情況,然后做不同的處理
//xml文件路徑
string xmlPath = Application.StartupPath + "\\Student.xml";//不帶屬性
string xmlPaths = Application.StartupPath + "\\Students.xml";//帶屬性
//dataset讀取簡單xml文件
DataSet ds = new DataSet();
ds.ReadXml(xmlPath);
//讀取第一條數(shù)據(jù)的name節(jié)點(diǎn)
string name = ds.Tables[0].Rows[0]["name"].ToString();
//輸出:張三
Console.WriteLine(name);
//dataset讀取帶屬性的xml文件
ds = new DataSet();
ds.ReadXml(xmlPaths);
//讀取的節(jié)點(diǎn)名稱
string nodeName = "name";
name = ds.Tables[nodeName].Rows[0][nodeName+"_Text"].ToString();
//讀取節(jié)點(diǎn)的id屬性
string id = ds.Tables[nodeName].Rows[0]["id"].ToString();
//輸出:id:1,name:張三
Console.WriteLine("id:{0},name:{1}",id,name);
第二種方式:XmlDocument
這種方式就很強(qiáng)大并且靈活了,根據(jù)節(jié)點(diǎn)順序逐步獲取就可以
using System.Xml;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPaths);
XmlNode xmlRoot = xmlDoc.DocumentElement;
name = xmlRoot.selectSingleNode("student/name").InnerText;
id = xmlRoot.selectSingleNode("student/name").Attributes["id"].InnerText;
Console.WriteLine("id:{0},name:{1}", id, name);
foreach (XmlNode node in xmlRoot.selectNodes("student/name"))
{
Console.WriteLine("id:{0},name:{1}", node.Attributes["id"].InnerText, node.InnerText);
}
第三種方式:JSON.NET
使用JSON.NET可以將xml轉(zhuǎn)換成json去操作
如果是對xml文件進(jìn)行操作的話,個人不太建議使用這種方式;
需要引入Newtonsoft.Json.dll,使用時請注意版本,低版本可能不支持
//需導(dǎo)入命名空間
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
//XmlDocument讀取xml文件
xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPaths);
//轉(zhuǎn)換為json
string json = JsonConvert.SerializeXmlNode(xmlDoc);
//解析json
JObject jobj = JObject.Parse(json);
JArray jarr = JArray.Parse(jobj["studentList"]["student"].ToString());
//輸出:id:1,name:張三
Console.WriteLine("id:{0},name:{1}", jarr[0]["name"]["#text"], jarr[0]["name"]["@id"]);
簡單的xml文件個人推薦使用第一種,復(fù)雜點(diǎn)的使用第二種,具體可以根據(jù)需求選擇。
該文章在 2023/2/27 10:21:58 編輯過