主要是以字符串的形式来读取xml,然后通过遍历读取节点,通过节点属性名称获取属性值

/// <summary>
/// 初始化OPC参数配置
/// </summary>
/// <returns></returns>
public static OCPParamsDefine InitOPCParamsConfig()
{
OCPParamsDefine _OCPParamsDefine = null; ;
byte[] buffer = Encoding.GetEncoding("GB2312").GetBytes(OPCClientResource.OPCClientParams);
MemoryStream ms = new MemoryStream();
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
XmlTextReader xmlReader = new XmlTextReader(ms);
_OCPParamsDefine= LoadFromXml(xmlReader);
xmlReader.Close();
return _OCPParamsDefine;

}

/// <summary>
/// 从xml文件加载配置
/// </summary>
/// <param name="xmlReader">xml文档</param>
static OCPParamsDefine LoadFromXml(XmlTextReader xmlReader)
{
xmlReader.WhitespaceHandling = WhitespaceHandling.None;
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element && string.Compare(xmlReader.Name, "OPCServerParam", true) == 0)
{
OCPParamsDefine _OCPParamsDefine = new OCPParamsDefine();
if (!xmlReader.IsEmptyElement)
{
xmlReader.Read();
int beginNodeDepth = xmlReader.Depth;
do
{
if (xmlReader.NodeType == XmlNodeType.Element)
{
if (string.Compare(xmlReader.Name, "Groups", true) == 0)
{
string groupsName=xmlReader.GetAttribute("Name");
_OCPParamsDefine.GroupsName = groupsName;
// OCPParamsDefine _OCPParamsDefine = new OCPParamsDefine(groupsName);
do
{
xmlReader.Read();
if (xmlReader.NodeType == XmlNodeType.Element)
{
if ((string.Compare(xmlReader.Name, "Group", true) == 0))
{
do
{
string groupName=xmlReader.GetAttribute("Name");
Group group = new Group(groupName) { GroupsName=groupsName};
group.Items = GetItems(xmlReader, groupName, groupsName);//获取组下的每一项

_OCPParamsDefine.Groups.Add(group);
xmlReader.Skip();
} while (!xmlReader.EOF);
}
}
// xmlReader.Skip();
} while (!xmlReader.EOF);

}
}
// xmlReader.Skip();
} while (beginNodeDepth == xmlReader.Depth && !xmlReader.EOF);
}
return _OCPParamsDefine;
// break;
}
}
return null;
}

static List<Item> GetItems(XmlTextReader xmlReader, string groupName, string groupsName)
{
List<Item> items = new List<Item>();
xmlReader.Read();
if (xmlReader.NodeType == XmlNodeType.Element)
{
if ((string.Compare(xmlReader.Name, "Items", true) == 0))
{
do
{
xmlReader.Read();
if (xmlReader.NodeType == XmlNodeType.Element)
{
if ((string.Compare(xmlReader.Name, "Item", true) == 0))
{
string itemName = xmlReader.GetAttribute("Name");
int clientHandler = Convert.ToInt32(xmlReader.GetAttribute("ClientHandler"));
Item item = new Item() { GroupsName=groupsName,GroupName = groupName, _Item = itemName, ClientHandler = clientHandler };
items.Add(item);
// group.Items.Add(item);
}
}
// xmlReader.Skip();
} while (!xmlReader.EOF);
}
}
return items;
}

C# 读取资源文件.resx 中的xml资源的更多相关文章

  1. Android 在资源文件(res/strings.xml)定义一维数组,间接定义二维数组

    经常我们会在资源文件(res/strings.xml)定义字符串,一维数组,那定义二维数组?直接定义二维数组没找到,可以间接定义. 其实很简单,看过用过一次就可以记住了,一维数组估计大家经常用到,但是 ...

  2. 在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)

    在IIS上新发布的网站,网站能打开,但样式与js资源文件加载不到(资源文件和网页是同一个域名下,例如:网页www.xxx.com/index.aspx,图片www.xxx.com/pic.png). ...

  3. 安卓编程资源文件string中对占位符的使用详解

    这里将为你详细介绍占位符的使用,将其学以致用,可以达到简化布局文件,减少字符串资源量. 1.在资源文件中的使用. 打开资源文件中的strings.xml文件,进行编辑.如下图所示: 图  1.0 2. ...

  4. 将资源文件夹中的文件通过流的方式写入到应用的File文件夹中

    //1.在Files文件夹中创建同名的数据库文件 File files = getFilesDir(); File file = new File(files, DBName); if(file.ex ...

  5. Android中 string.xml资源 如何添加参数?

    在android 开发,我们通常会用string.xml资源去设置textview等控件的字符串.而值一般是与程序的运行结果无关的. 但有时需要根据运行的结果来显示到控件中,这时字符串资源就不能写死了 ...

  6. C# 读取指定文件夹中的全部文件,并按规则生成SQL语句!

    本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using System.IO; namespace ToSql{ cla ...

  7. C# wpf 使用资源文件 resx

    随意新建一个wpf应用 在cs代码编辑,增加 using System.Resources; 放在最上 在方案新建文件夹 名 文件 在 文件 新建资源文件 资源.resx 资源.resx 添加字符串 ...

  8. iOS - Bundle 资源文件包生成和常见资源文件使用

    1.Bundle 文件 Bundle 文件,就是资源文件包.我们将许多图片.XIB.文本文件组织在一起,打包成一个 Bundle 文件.方便在其他项目中引用包内的资源. Bundle 文件是静态的,也 ...

  9. Asp.net全局资源文件( App_GlobalResources)和本地资源文件(App_LocalResources)

    今天项目中需要加入对不同语言的支持. 找了半天的资料,关于GlobalResources和LocalResource都说的模棱两可的. 只能自己边找资料边试.     全局资源文件 样例(Demo中有 ...

随机推荐

  1. swift -基础语法

    /**         * 1.变量         */        let count1 = 11;        print(count1);                var count ...

  2. 2018.11.08 NOIP模拟 班车(倍增+dfs+bit)

    传送门 对于每个点离线处理出向上走2i2^i2i班车到的最上面的点. 然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果 ...

  3. 2018.11.07 bzoj2751: [HAOI2012]容易题(easy)(组合数学)

    传送门 组合数学一眼题. 感觉一直做这种题智商会降低. 利用组合数学的分步计数原理. 只用关心每个数不被限制的取值的总和然后乘起来就可以了. 对于大部分数都不会被限制,总和都是n(n+1)2\frac ...

  4. 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]

    [注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...

  5. maven打包到私服,打的是war包,好郁闷

    jenkins打完包上传到私服以后,发现只有war包,然而并木有别人想要的jar包,郁闷之极啊! 然后把公司的项目做了对比,发现这个正常的能上传jar包的项目的与我的另一个项目有点出入: 正常:  异 ...

  6. CURL模拟表单post提交及相关常用参数的使用(包括提交表单同时上传文件)

    转载自:https://blog.csdn.net/freedomwjx/article/details/43278157 (注:在curl前面加上time如time curl xxx,可以在最后显示 ...

  7. git,版本控制教程

    主要内容 版本回退 工作区和暂存区 管理修改 撤销修改 删除文件 分支管理     *****此处没有深讲***** 一.两条基本查看命名 查看状态命令: git status 查看修改内容命令: g ...

  8. oss+上传文件夹

    最近公司做工程项目,实现文件夹云存储上传. 网上找了一天,发现网上很多代码都存在相似问题,最后终于找到了一个满足我需求的项目. 工程如下: 这里对项目的文件夹传输功能做出分析,怎么实现文件夹上传的,如 ...

  9. chrome 字体太浅,如何设置

    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-directwrite-for-ui

  10. 为什么要重写hashCode()方法和equals()方法及如何重写

    我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...