C#读取XML中元素和属性值的实现代码
- 作者: 小太羊
- 来源: 51数据库
- 2021-08-25
1、school.xml,如下:
复制代码 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<!--启明培训学校学生信息:
1、一年级学生
2、二年级学生
-->
<school name="启明培训学校">
<grades>
<grade id="1" name="一年级">
<classes>
<class id="101" name="一班">
<teachers>
<teacher teach="语文"><teachername><![cdata[王军]]></teachername></teacher>
<teacher teach="数学"><teachername><![cdata[周杰]]></teachername></teacher>
</teachers>
<students>
<student id="10101">
<name>亢阳</name>
<sex>女</sex>
</student>
<student id="10102">
<name>田镇南</name>
<sex>男</sex>
</student>
<student id="10103">
<name>刘嘉</name>
<sex>女</sex>
</student>
</students>
</class>
</classes>
</grade>
<grade id="2" name="二年级">
<classes>
<class id="201" name="二班">
<teachers>
<teacher teach="语文"><teachername><![cdata[胡军]]></teachername></teacher>
<teacher teach="数学"><teachername><![cdata[王洁]]></teachername></teacher>
</teachers>
<students >
<student id="20101">
<name>胡艳</name>
<sex>女</sex>
</student>
<student id="20102">
<name>张三</name>
<sex>男</sex>
</student>
<student id="20103">
<name>李四</name>
<sex>女</sex>
</student>
</students>
</class>
</classes>
</grade>
</grades>
</school>
2、xmlreader.cs (我用的是控制台应用程序,直接附上全部代码吧)
复制代码 代码如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.xml;
namespace xmlreader
{
class xmlreader
{
static void main(string[] args)
{
string xmlfilepath = "school.xml";
xmldocument doc = new xmldocument();
doc.load(xmlfilepath);
//学校 使用xpath表达式选择文档中所有的schoo的子节点
xmlnodelist schoolnodelist = doc.selectnodes("/school");
if (schoolnodelist != null)
{
foreach (xmlnode schoolnode in schoolnodelist)
{
//通过attributes获得属性名为name的属性
string schoolname = schoolnode.attributes["name"].value;
console.writeline("学校:" + schoolname);
#region 年级
//通过selectsinglenode方法获得当前节点下的grades子节点
xmlnode gradesnode = schoolnode.selectsinglenode("grades");
if (gradesnode != null)
{
//通过childnodes属性获得grades的所有一级子节点
xmlnodelist gradenodelist = gradesnode.childnodes;
if (gradenodelist != null)
{
foreach (xmlnode gradenode in gradenodelist)
{
console.writeline("\t");
console.writeline("年级:" + gradenode.attributes["name"].value + " id:" + gradenode.attributes["id"].value);
#region 班级
//通过selectsinglenode方法获得当前节点下的classes子节点
xmlnode classesnode = gradenode.selectsinglenode("classes");
if (classesnode != null)
{
//通过childnodes属性获得classes的所有一级子节点
xmlnodelist classnodelist = classesnode.childnodes;
if (classnodelist != null)
{
foreach (xmlnode classnode in classnodelist)
{
console.writeline(" 班级:" + classnode.attributes["name"].value + " id:" + classnode.attributes["id"].value);
#region 老师
xmlnode teachersnode = classnode.selectsinglenode("teachers");
if (teachersnode != null)
{
xmlnodelist teachernodelist = teachersnode.childnodes;
if (teachernodelist != null)
{
foreach (xmlnode teachernode in teachernodelist)
{
xmlnode teachernamenode = teachernode.firstchild;
xmlcdatasection cdate = (xmlcdatasection)teachernamenode.firstchild;
if (cdate != null)
{
console.writeline(" "+teachernode.attributes["teach"].value + "老师:"+cdate.innertext.trim());
}
}
}
}
#endregion 老师
#region 所有学生
xmlnode studentsnode = classnode.selectsinglenode("students");
if (studentsnode != null)
{
xmlnodelist studentnodelist = studentsnode.childnodes;
if (studentnodelist != null)
{
foreach (xmlnode studentnode in studentnodelist)
{
console.writeline(" 学生:" + studentnode.attributes["id"].value);
//获取student的属性值name和文本
xmlnode stu1 = studentnode.firstchild;
xmlelement xe1 = (xmlelement)stu1;
if (xe1 != null)
{
console.writeline(" 姓名:" + xe1.innertext.trim());
}
//获取student的属性值sex和文本
xmlnode stu2 = studentnode.lastchild;
xmlelement xe2 = (xmlelement)stu2;
if (xe2 != null)
{
console.writeline(" 姓别:" + xe2.innertext.trim());
}
}
}
#endregion 所有学生
}
}
}
#endregion 班级
}
}
}
#endregion 年级
console.write("\r\n按随意键跳出");
console.readkey();
}
}
}
}
}
}
ok,运行,如图:
推荐阅读
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0
