当前位置:首页 > C#中读取xml文件指定节点
C#中读取xml文件指定节点
假设xml文件内容是
我们需要读取Activity节点下的内容,因为存在多个Activity,所以需要读取多个节点。可以使用 XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找节点。前一个是查找匹配的第一个节点,而后一个则会返回一个节点列表。
1.XmlDocument.SelectSingleNode方法的使用 首先创建一个读取xml文件的方法ReadXmlNode
///
/// 读取xml中的指定节点的值 ///
public void ReadXmlNode(string filename) {
XmlDocument xmlDoc = new XmlDocument(); try {
xmlDoc.Load(filename);
//读取Activity节点下的数据。SelectSingleNode匹配第一个Activity节点 XmlNode root = xmlDoc.SelectSingleNode(\当节点Workflow带有属性是,使用SelectSingleNode无法读取 if (root != null) {
string ActivityId = (root.SelectSingleNode(\
string ActivityName = (root.SelectSingleNode(\\
string ActivityLevel = root.SelectSingleNode(\
Console.WriteLine(\+ ActivityId + \+ ActivityName + \ } else {
Console.WriteLine(\ 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(\ Console.Read(); } }
输出结果为:
ActivityId:1
ActivityName:start ActivityLevel:1
2.XmlDocument.SelectNodes方法的使用 ///
/// 读取xml中的指定节点的值,如果有多个同名节点,则全部读取
///
public void ReadXmlNodes(string filename) {
XmlDocument xmlDoc = new XmlDocument(); try {
xmlDoc.Load(filename);
XmlNodeList xnList = xmlDoc.SelectNodes(\
Console.WriteLine(\共有{0}个节点\xnList.Count);//输出xnList中节点个数。
foreach (XmlNode xn in xnList) {
//无法使用xn[\
string ActivityId = (xn.SelectSingleNode(\
string ActivityName = xn.SelectSingleNode(\ string ActivityLevel = xn.SelectSingleNode(\ // Console.WriteLine(\ActivityName + \ Console.WriteLine(\ {0}/nActivityName: {1}/nActivityLevel: {2}\ } }
catch (Exception e) {
//显示错误信息
Console.WriteLine(e.Message); } }
然后在主函数中调用该方法
class Program {
static void Main(string[] args) {
XMLOperation xmlOpr = new XMLOperation(); xmlOpr.ReadXmlNodes(\ 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/,虽然没有用到参考文章中的方法,不过总觉得以后会用到的。
///
///通过ActivityLevel获取xmlnode,需要保证ActivityLevel在一个xml文档中是唯一的。
///
public XmlNode getXmlNode(string filename, string activitylevel) {
XmlDocument xmlDoc = new XmlDocument(); try {
xmlDoc.Load(filename);
XmlNodeList xnList = xmlDoc.SelectNodes(\当节点Workflow带有属性是,使用SelectSingleNode无法读取 foreach (XmlNode xn in xnList) {
string ActivityLevel = xn.SelectSingleNode(\ 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(\
string ActivityId = (xn.SelectSingleNode(\
string ActivityName = (xn.SelectSingleNode(\ string ActivityLevel = xn.SelectSingleNode(\
Console.WriteLine(\+ \ Console.Read(); } }
输出结果为:
ActivityId:2
ActivityName:pass ActivityLevel:2
共分享92篇相关文档