服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 获取XML文件内容的多种方式总结

C# 获取XML文件内容的多种方式总结

2023-03-01 15:21Danny_hi C#

这篇文章主要介绍了C# 获取XML文件内容的多种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

C#获取XML文件内容的方式

首先设定有一个xml文件Configs.xml,其内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8" ?>
<Config>
  <Device name="aaa">
    <Type name="a01" func="1"></Type>
    <Type name="a02"></Type>
    <Type name="a03"></Type>
    <Type name="a04"></Type>
  </Device>
  <Device name="bbb">
    <Type name="b01"></Type>
    <Type name="b02"></Type>
    <Type name="b03"></Type>
    <Type name="b04"></Type>
  </Device>
  <Device name="ccc">
    <Type name="c01"></Type>
    <Type name="c02"></Type>
    <Type name="c03"></Type>
    <Type name="c04" func="2"></Type>
  </Device>
</Config>

一、读取外部的XML文件方法

?
1
2
3
4
5
6
7
8
9
10
11
//获取所有一级目录
List<string> devices = new List<string>();
XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\TEMP\Configs.xml");
XmlNode xnl1 = doc.DocumentElement;
foreach (XmlNode xn1 in xnl1.ChildNodes)
{
    XmlElement xe1 = (XmlElement)xn1;
    devices.Add(xe1.GetAttribute("name").ToString());
}
return devices;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//获取某个一级目录下的子目录
 List<string> types = new List<string>();
 XmlDocument doc = new XmlDocument();
 doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\TEMP\Configs.xml");
 XmlNode xnl1 = doc.DocumentElement;
 foreach (XmlNode xn1 in xnl1)
 {
     XmlElement xe1 = (XmlElement)xn1;
     if (xe1.GetAttribute("name").ToString() == "aaa")
     {
         XmlNodeList xnl2 = xe1.ChildNodes;
         foreach (XmlNode xn2 in xnl2)
         {
             XmlElement xe2 = (XmlElement)xn2;
             types.Add(xe2.GetAttribute("name").ToString());
         }
         break;
     }
 }
 return types;

二、读取内部XML文件方法

文件属性:

复制到输出目录:不复制

生成操作:嵌入的资源

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//获取所有一级目录
List<string> devices = new List<string>();         
string config= System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Configs.Configs.xml";
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream s = assembly.GetManifestResourceStream(config);
 
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(s, settings);
XmlDocument doc = new XmlDocument();
 
doc.Load(reader);
XmlNode xn = doc.SelectSingleNode("Config");
XmlNodeList xnl1 = xn.ChildNodes;
foreach (XmlNode xn1 in xnl1)
{
    XmlElement xe1 = (XmlElement)xn1;
    devices.Add(xe1.GetAttribute("name").ToString());
}
reader.Close();
return devices;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//获取某个一级目录下的子目录
List<string> types = new List<string>();           
string config= System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Configs.Configs.xml";
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream s = assembly.GetManifestResourceStream(config);
 
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(s, settings);
XmlDocument doc = new XmlDocument();
 
doc.Load(reader);
XmlNode xn = doc.SelectSingleNode("Config");
XmlNodeList xnl1 = xn.ChildNodes;
foreach (XmlNode xn1 in xnl1)
{
    XmlElement xe1 = (XmlElement)xn1;
    if (xe1.GetAttribute("name").ToString() == "aaa")
    {
        XmlNodeList xnl2 = xe1.ChildNodes;
        foreach (XmlNode xn2 in xnl2)
        {
            XmlElement xe2 = (XmlElement)xn2;
            types.Add(xe2.GetAttribute("name").ToString());
        }
        break;
    }
}
reader.Close();
return types;

三、读取类库中XML文件的方法

文件属性:

复制到输出目录:不复制

生成操作:Resource

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
List<Type> types = new List<Type>();
string fileName = AppDomain.CurrentDomain.BaseDirectory + "Config.dll";
System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFile(fileName);
string resourceName = assembly.GetName().Name + ".g";
System.Resources.ResourceManager manager = new System.Resources.ResourceManager(resourceName, assembly);
object obj = manager.GetObject("asserts/config.xml");//全部字母小写
System.IO.Stream stream = (System.IO.Stream)obj;
 
XmlDocument doc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释,因为在没有特别说明的情况下,注释也是一个节点
XmlReader reader = XmlReader.Create(stream, settings);
 
doc.Load(reader);
XmlNode xn = doc.SelectSingleNode("Config");
XmlNodeList xnl1 = xn.ChildNodes;
 
foreach (XmlNode xn1 in xnl1)
{
    XmlElement xe1 = (XmlElement)xn1;
    Type type = new Type();
    type.name = xe1.GetAttribute("name").ToString();
    type.func = xe1.GetAttribute("func").ToString();
    XmlNodeList xnl0 = xe1.ChildNodes;
    type.Content = xnl0.Item(0).InnerText.Substring(1).TrimEnd();
    types.Add(type);
}
reader.Close();
return types;

四、读取程序内添加的外部可见的XML文件

文件属性:

复制到输出目录:始终复制

生成操作:内容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
List<string> devices= new List<string>();
XmlDocument doc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(@"Asserts\Config.xml", settings);
 
doc.Load(reader);
XmlNode xn = doc.SelectSingleNode("Config");
XmlNodeList xnl1 = xn.ChildNodes;
 
foreach (XmlNode xn1 in xnl1)
{
    XmlElement xe1 = (XmlElement)xn1;
    devices.Add(xe1.GetAttribute("name").ToString());
}
reader.Close();
return serialsList;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_43024228/article/details/126717877

延伸 · 阅读

精彩推荐
  • C#C# 通过反射初探ORM框架的实现原理(详解)

    C# 通过反射初探ORM框架的实现原理(详解)

    下面小编就为大家分享一篇C# 通过反射初探ORM框架的实现原理详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    cccc_hi9882022-02-16
  • C#C# winform主界面打开并关闭登录界面的方法

    C# winform主界面打开并关闭登录界面的方法

    这篇文章主要介绍了C# winform主界面打开并关闭登录界面的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Waming6322022-02-27
  • C#基于C#编写经理评分系统

    基于C#编写经理评分系统

    最近接了这样一个项目,要求使用c#编写经理评分系统,需求,要显示员工信息,实现项目经理给员工评分功能,今天小编分步骤给大家介绍,需要的的朋...

    会飞的豆子7662021-12-29
  • C#浅谈C#网络编程详解篇

    浅谈C#网络编程详解篇

    在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践,需要的朋友可以参考下...

    蘑菇先生5272021-12-20
  • C#详解WPF的InkCanvas选择模式

    详解WPF的InkCanvas选择模式

    这篇文章主要介绍了WPF InkCanvas选择模式的相关资料,帮助大家更好的理解和学习使用c# wpf,感兴趣的朋友可以了解下...

    louzi6912022-11-09
  • C#C#基于TCP协议的服务器端和客户端通信编程的基础教程

    C#基于TCP协议的服务器端和客户端通信编程的基础教程

    这篇文章主要介绍了C#基于TCP协议的服务器端和客户端通信编程的基础教程,文中讲解了C#中TCP编程主要相关的TcpListener类与TcpClient类用法,需要的朋友可以参...

    剑萧舞蝶6502021-11-19
  • C#C#实现在listview中插入图片实例代码

    C#实现在listview中插入图片实例代码

    这篇文章主要介绍了C#实现在listview中插入图片实例代码的相关资料,需要的朋友可以参考下...

    net小伙7332021-12-29
  • C#一个C#开发者重温C++的心路历程

    一个C#开发者重温C++的心路历程

    作为一个C#开发为什么要重新学习C++呢?因为在C#在很多业务场景需要调用一些C++编写的COM组件,如果不了解C++,那么,很容易。。。注定是要被C++同事忽悠...

    kiba5188492022-07-22