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,运行,如图: