實務上會碰到一些XML資料的讀取 ,
有些是XML檔案(一個檔案,內文結構是XML)
有些是存入DB的XML格式資料(一筆存入DB的資料,內容結構是XML)
以下僅分享讀取XML資料的部分做介紹
語法重點:
*SelectSingleNode
*SelectNodes
==================================================
XML範例:
<英雄聯盟>
<人物>提摩</人物>
<種族>約德爾人</種族>
<特徵>
<聲音>操拎呆</聲音>
<台詞>Captain Teemo on duty</台詞>
</特徵>
<特徵>
<聲音>笑起來很G掰</聲音>
<台詞>Hut two three four!Hut two three four!</台詞>
</特徵>
</英雄聯盟>
==================================================
Model部分(示範用,不重要)
public string 人物{get;set;}
public string 種族{get;set;}
public string 聲音{get;set;}
public string 台詞{get;set;}
==================================================
C#部分
XmlDocument doc = new XmlDocument();
doc.LoadXml(英雄聯盟.Content); //讀取XML資料,視資料來源進行調整,不贅述
XmlNode root = doc.DocumentElement; //XmlNode 表示XML文件中的單一節點
Model.人物 = root.SelectSingleNode("英雄聯盟/人物").InnerXml; //取得 提摩
Model.種族 = root.SelectSingleNode("英雄聯盟/種族").InnerXml; //取得 約德爾人
//注意,由於 特徵的結構為一個英雄有多個特徵,因此這邊使用root.SelectNodes取得 該英雄下的所有特徵
XmlNodeList featureList= root.SelectNodes("英雄聯盟/特徵"); //featureList會取得兩筆 特徵 裡面包含 聲音,跟台詞
這邊先打個岔,我的最終目標為 聲音字串要等於 "操拎呆"+ " " + "笑起來很G掰"
台詞字串要等於"Captain Teemo on duty And" + " " + "Hut two three four!Hut two three four!"
在C#中,如果要用字串相加,不要 string A = string.Empty ; string B = string.Empty ; string C = A+B;
請使用Stringbuilder,這個會有效能上的問題,我也不是很專精。
StringBuilder laughString = new StringBuilder(); //笑聲 字串
StringBuilder linesString = new StringBuilder();//台詞 字串
回到featureList的部分,由於我們取得的featureList,裡面會包含兩筆 特徵 ,而特徵下又包含聲音,跟台詞 所以用foreach來讀取
//XmlNodeList featureList= root.SelectNodes("英雄聯盟/特徵");
foreach(var eachFeature in featureList)
{
Model.聲音 = laughString.Append(eachFeature.SelectSingleNode("聲音").InnerXml + ' ')); //.Append為Stringbuilder字串相加語法
Model.台詞 = linesString .Append(eachFeature.SelectSingleNode("台詞").InnerXml+ ' ');
}
如內容有誤,或其他可討論的,還請不吝指教。