假設xml檔案内容是
<?xml version="1.0" encoding="utf-8"?>
<Workflow>
<Activity>
<ActivityId>1</ActivityId>
<ActivityName>start</ActivityName>
<BindingPageId>1</BindingPageId>
<BindingRoleId>1</BindingRoleId>
<ActivityLevel>1</ActivityLevel>
</Activity>
<ActivityId>2</ActivityId>
<ActivityName>pass</ActivityName>
<BindingPageId>2</BindingPageId>
<BindingRoleId>2</BindingRoleId>
<ActivityLevel>2</ActivityLevel>
</Workflow>
我們需要讀取Activity節點下的内容,因為存在多個Activity,是以需要讀取多個節點。可以使用 XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找節點。前一個是查找比對的第一個節點,而後一個則會傳回一個節點清單。
首先建立一個讀取xml檔案的方法ReadXmlNode
/// <summary>
/// 讀取xml中的指定節點的值
/// </summary>
public void ReadXmlNode(string filename)
{
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.Load(filename);
//讀取Activity節點下的資料。SelectSingleNode比對第一個Activity節點
XmlNode root = xmlDoc.SelectSingleNode("//Activity");//當節點Workflow帶有屬性是,使用SelectSingleNode無法讀取
if (root != null)
{
string ActivityId = (root.SelectSingleNode("ActivityId")).InnerText;
string ActivityName = (root.SelectSingleNode("ActivityName ")).InnerText;
string ActivityLevel = root.SelectSingleNode("ActivityLevel").InnerText;
Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
}
else
Console.WriteLine("the node is not existed");
//Console.Read();
}
catch (Exception e)
//顯示錯誤資訊
Console.WriteLine(e.Message);
}
然後在主函數中調用該方法
class Program
{
static void Main(string[] args)
{
XMLOperation xmlOpr = new XMLOperation();
xmlOpr.ReadXmlNode("activity.xml");
Console.Read();
}
}
輸出結果為:
ActivityId:1
ActivityName:start
ActivityLevel:1
/// 讀取xml中的指定節點的值,如果有多個同名節點,則全部讀取
/// </summary>
public void ReadXmlNodes(string filename)
{
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.Load(filename);
XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");
Console.WriteLine("共有{0}個節點", xnList.Count);//輸出xnList中節點個數。
foreach (XmlNode xn in xnList)
{
//無法使用xn["ActivityId"].InnerText
string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;
string ActivityName = xn.SelectSingleNode("ActivityName").InnerText;
string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;
// Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
Console.WriteLine("ActivityId: {0}/nActivityName: {1}/nActivityLevel: {2}", ActivityId, ActivityName, ActivityLevel);
}
}
catch (Exception e)
//顯示錯誤資訊
Console.WriteLine(e.Message);
}
{
static void Main(string[] args)
{
XMLOperation xmlOpr = new XMLOperation();
xmlOpr.ReadXmlNodes("activity.xml");
Console.Read();
}
}
輸出結果為:
共有2個節點
ActivityId: 1
ActivityName: start
ActivityLevel: 1
ActivityId: 2
ActivityName: pass
ActivityLevel: 2
///通過ActivityLevel擷取xmlnode,需要保證ActivityLevel在一個xml文檔中是唯一的。
public XmlNode getXmlNode(string filename, string activitylevel)
XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");//當節點Workflow帶有屬性是,使用SelectSingleNode無法讀取
if(activitylevel==ActivityLevel)
{
return xn;
}
return null;
XmlNode xn=xmlOpr.getXmlNode("activity.xml", "2");
string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;
string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText;
string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;
Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
ActivityId:2
ActivityName:pass
ActivityLevel:2
本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2011/05/02/2297021.html,如需轉載請自行聯系原作者