C#中读取xml文件指定节点
假设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>
<?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);
- }
- }
/// <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();
- }
- }
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);
- }
- }
/// <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();
- }
- }
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;
- }
/// <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();
- }
- }
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文件指定节点下的值
#region 读取xml文件指定节点下的值 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(result); XmlNode root ...
- 读取XML文件的节点内的内容
<?xml version="1.0" encoding="utf-8" ?> <data> <tag3>15</ta ...
- .net中读取xml文件中节点的所有属性信息
功能描述: 将数据以xml的格式记录成配置文件,需要获取配置文件中的数据时,则获取对应的配置文件,读取配置文件里对应节点的所有属性. 逻辑实现: 1.将数据配置好在xml文件中. 2.获取xml文件中 ...
- PHP读取XML文件数据获取节点值
最近在接入渠道的时候遇到接口返回是xml数据.现在接口数据返回json数据格式比较常见. 如何获取xml里面真正数据? 对象结果集合单个值的强制转换处理.(直接代码说明) demo示例: 创建xml ...
- Silverlight 中 读取XML文件
一:xml文件 二:后台代码 private void ReadXml() { List<TreeViewItem> nodes = new List<TreeViewItem> ...
- 使用javascript中读取Xml文件做成的一个二级联动菜单
[html] view plaincopy <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...
- java Domj4读取xml文件
先概括,再以代码形式给出. 获取节点: Iterator Element.nodeIterator(); //获取当前标签节点下的所有子节点 获取 标签: Element Document.get ...
- js 读取xml文件
读取xml文件 [原创 2007-6-20 17:35:37] 字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...
- opencv局限:cv::FileStorage读取中,xml文件的第一层节点不能超过4个
今天测试发现一个问题,cv::FileStorage读取中,xml文件的第一层节点不能超过4个. <?xml version="1.0"?> <opencv_st ...
随机推荐
- Codeforces Round #439 (Div. 2) Problem C (Codeforces 869C) - 组合数学
— This is not playing but duty as allies of justice, Nii-chan! — Not allies but justice itself, Onii ...
- 2018年11月16日 我和SB交流有代沟-继续字符串4
test="abcdeffedcba" v=test.lstrip("bcabc")#寻找的是最多匹配然后移除指定字符串 print("1.lstri ...
- QML常用控件
这里的控件是显示的元素 1.Item:一切的基类 Item { Image { source: "tile.png" } Image { x: width: height: sou ...
- tomcat部署maven web项目
tomcat上部署maven web项目的三种方法 1.将maven项目打成war包,然后放到tomcat容器中发布: 2.在IDE工具中部署tomcat,然后使用远程部署方式部署本地maven项目: ...
- Android灯光系统通知灯【转】
本文转载自:https://blog.csdn.net/danwuxie/article/details/82193880 一.通知灯应用程序的编写 1.首先实现一个按钮功能 <LinearLa ...
- win10中命令操作Zookeeper
目录 zk客户端命令: 连接: 命令: 四字命令: 常用命令: 返回参数说明: 参考: zk客户端命令: 连接: C:\Users\qhong\Desktop $ zkCli.cmd -server ...
- 抠图|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
样例输入: 3 4 5 1 0 0 0 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 5 6 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 0 0 ...
- 题解—— 洛谷 p1269 信号放大器(贪心)
深刻的教训,不要写错读入 #include <cstdio> #include <algorithm> using namespace std; ; ; ,u[MAXM],v[ ...
- 18 Issues in Current Deep Reinforcement Learning from ZhiHu
深度强化学习的18个关键问题 from: https://zhuanlan.zhihu.com/p/32153603 85 人赞了该文章 深度强化学习的问题在哪里?未来怎么走?哪些方面可以突破? 这两 ...
- [蓝桥] 历届试题 错误票据 (List用法,空格处理)
时间限制:1.0s 内存限制:256.0MB 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人 ...