C#中讀取xml檔案指定節點

來源:互聯網
上載者:User

參考:Select XML Nodes by Name

假設xml檔案內容是

<?xml version="1.0" encoding="utf-8"?><br /><Workflow><br /> <Activity><br /> <ActivityId>1</ActivityId><br /> <ActivityName>start</ActivityName><br /> <BindingPageId>1</BindingPageId><br /> <BindingRoleId>1</BindingRoleId><br /> <ActivityLevel>1</ActivityLevel><br /> </Activity><br /> <Activity><br /> <ActivityId>2</ActivityId><br /> <ActivityName>pass</ActivityName><br /> <BindingPageId>2</BindingPageId><br /> <BindingRoleId>2</BindingRoleId><br /> <ActivityLevel>2</ActivityLevel><br /> </Activity><br /></Workflow>

我們需要讀取Activity節點下的內容,因為存在多個Activity,所以需要讀取多個節點。可以使用 XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法尋找節點。前一個是尋找匹配的第一個節點,而後一個則會返回一個節點列表。

1.XmlDocument.SelectSingleNode方法的使用

首先建立一個讀取xml檔案的方法ReadXmlNode

/// <summary><br /> /// 讀取xml中的指定節點的值<br /> /// </summary><br /> public void ReadXmlNode(string filename)<br /> {<br /> XmlDocument xmlDoc = new XmlDocument();<br /> try<br /> {<br /> xmlDoc.Load(filename);<br /> //讀取Activity節點下的資料。SelectSingleNode匹配第一個Activity節點<br /> XmlNode root = xmlDoc.SelectSingleNode("//Activity");//當節點Workflow帶有屬性是,使用SelectSingleNode無法讀取<br /> if (root != null)<br /> {<br /> string ActivityId = (root.SelectSingleNode("ActivityId")).InnerText;<br /> string ActivityName = (root.SelectSingleNode("ActivityName ")).InnerText;<br /> string ActivityLevel = root.SelectSingleNode("ActivityLevel").InnerText;<br /> Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);<br /> }<br /> else<br /> {<br /> Console.WriteLine("the node is not existed");<br /> //Console.Read();<br /> }<br /> }<br /> catch (Exception e)<br /> {<br /> //顯示錯誤資訊<br /> Console.WriteLine(e.Message);<br /> }<br /> }

然後在主函數中調用該方法

class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> XMLOperation xmlOpr = new XMLOperation();<br /> xmlOpr.ReadXmlNode("activity.xml");<br /> Console.Read();<br /> }<br /> }

輸出結果為:

ActivityId:1
ActivityName:start
ActivityLevel:1

 

2.XmlDocument.SelectNodes方法的使用

/// <summary><br /> /// 讀取xml中的指定節點的值,如果有多個同名節點,則全部讀取<br /> /// </summary><br /> public void ReadXmlNodes(string filename)<br /> {<br /> XmlDocument xmlDoc = new XmlDocument();<br /> try<br /> {<br /> xmlDoc.Load(filename);<br /> XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");<br /> Console.WriteLine("共有{0}個節點", xnList.Count);//輸出xnList中節點個數。<br /> foreach (XmlNode xn in xnList)<br /> {<br /> //無法使用xn["ActivityId"].InnerText<br /> string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;<br /> string ActivityName = xn.SelectSingleNode("ActivityName").InnerText;<br /> string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;<br /> // Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);<br /> Console.WriteLine("ActivityId: {0}/nActivityName: {1}/nActivityLevel: {2}", ActivityId, ActivityName, ActivityLevel);<br /> }<br /> }<br /> catch (Exception e)<br /> {<br /> //顯示錯誤資訊<br /> Console.WriteLine(e.Message);<br /> }<br /> }

然後在主函數中調用該方法

class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> XMLOperation xmlOpr = new XMLOperation();<br /> xmlOpr.ReadXmlNodes("activity.xml");<br /> Console.Read();<br /> }<br /> }

 輸出結果為:

共有2個節點
ActivityId:  1
ActivityName:  start
ActivityLevel:  1
ActivityId:  2
ActivityName:  pass
ActivityLevel:  2

3.通過節點屬性尋找指定節點

參考http://www.csharp-examples.net/xml-nodes-by-attribute-value/,雖然沒有用到參考文章中的方法,不過總覺得以後會用到的。

/// <summary><br /> ///通過ActivityLevel擷取xmlnode,需要保證ActivityLevel在一個xml文檔中是唯一的。<br /> /// </summary><br /> public XmlNode getXmlNode(string filename, string activitylevel)<br /> {<br /> XmlDocument xmlDoc = new XmlDocument();<br /> try<br /> {<br /> xmlDoc.Load(filename);<br /> XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");//當節點Workflow帶有屬性是,使用SelectSingleNode無法讀取<br /> foreach (XmlNode xn in xnList)<br /> {<br /> string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;<br /> if(activitylevel==ActivityLevel)<br /> {<br /> return xn;<br /> }<br /> }<br /> }<br /> catch (Exception e)<br /> {<br /> //顯示錯誤資訊<br /> Console.WriteLine(e.Message);<br /> }<br /> return null;<br /> }

然後在主函數中調用該方法

class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> XMLOperation xmlOpr = new XMLOperation();<br /> XmlNode xn=xmlOpr.getXmlNode("activity.xml", "2");<br /> string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;<br /> string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText;<br /> string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;<br /> Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);<br /> Console.Read();<br /> }<br /> }

輸出結果為:

ActivityId:2
ActivityName:pass
ActivityLevel:2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.