C#中读取xml文件指定节点
2011-05-02 11:33
393 查看
参考:Select XML Nodes by Name
假设xml文件内容是
我们需要读取Activity节点下的内容,因为存在多个Activity,所以需要读取多个节点。可以使用 XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找节点。前一个是查找匹配的第一个节点,而后一个则会返回一个节点列表。
然后在主函数中调用该方法
输出结果为:
ActivityId:1
ActivityName:start
ActivityLevel:1
然后在主函数中调用该方法
输出结果为:
共有2个节点
ActivityId: 1
ActivityName: start
ActivityLevel: 1
ActivityId: 2
ActivityName: pass
ActivityLevel: 2
然后在主函数中调用该方法
输出结果为:
ActivityId:2
ActivityName:pass
ActivityLevel:2
假设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> <Activity> <ActivityId>2</ActivityId> <ActivityName>pass</ActivityName> <BindingPageId>2</BindingPageId> <BindingRoleId>2</BindingRoleId> <ActivityLevel>2</ActivityLevel> </Activity> </Workflow>
我们需要读取Activity节点下的内容,因为存在多个Activity,所以需要读取多个节点。可以使用 XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找节点。前一个是查找匹配的第一个节点,而后一个则会返回一个节点列表。
1.XmlDocument.SelectSingleNode方法的使用
首先创建一个读取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
2.XmlDocument.SelectNodes方法的使用
/// <summary> /// 读取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); } }
然后在主函数中调用该方法
class Program { 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
3.通过节点属性查找指定节点
参考http://www.csharp-examples.net/xml-nodes-by-attribute-value/,虽然没有用到参考文章中的方法,不过总觉得以后会用到的。/// <summary> ///通过ActivityLevel获取xmlnode,需要保证ActivityLevel在一个xml文档中是唯一的。 /// </summary> public XmlNode getXmlNode(string filename, string activitylevel) { XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.Load(filename); XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取 foreach (XmlNode xn in xnList) { string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText; if(activitylevel==ActivityLevel) { return xn; } } } catch (Exception e) { //显示错误信息 Console.WriteLine(e.Message); } return null; }
然后在主函数中调用该方法
class Program { static void Main(string[] args) { XMLOperation xmlOpr = new XMLOperation(); 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); Console.Read(); } }
输出结果为:
ActivityId:2
ActivityName:pass
ActivityLevel:2
相关文章推荐
- C#中读取xml文件指定节点
- C#中读取xml文件指定节点
- C#中读取xml文件指定节点
- C#中读取xml文件指定节点
- C#读取xml文件指定节点下的值
- C#中读取xml文件指定节点
- C#中读取xml文件指定节点
- c# 读取*.config文件指定节点的值
- 用C#读取XML指定节点下的值
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点,C#对象与xml文件的相互转换等等。)
- 读取XML文件的指定节点的值 并转换为Item
- C# 如何得到XML文件中指定的节点属性值
- c#读取xml文件的节点内容
- c#读取xml文件的一个节点
- 读取xml文件指定节点下的值
- c#访问xml文件中遍历指定节点名的要素
- c#用XmlDocument读取指定节点
- C#读取XML文件,反序列化为指定对象
- 用C#读取XML指定节点下的值
- C#-XML文件提取字符串+字符串存为XML文件+创建XML(自定义节点)文件+读取节点内容