C#获取Xml文件的数据并输出至控制台
Xml文件如下
这是用DataTable.WriteXml方法获取的
<?xml version="1.0" standalone="yes"?>
<Students>
<Table>
<Id>150</Id>
<Name>李四</Name>
<Sex>男</Sex>
<Age>26</Age>
</Table>
<Table>
<Id>154</Id>
<Name>李四</Name>
<Sex>男</Sex>
<Age>26</Age>
</Table>
<Table>
<Id>164</Id>
<Name>王</Name>
<Sex>女</Sex>
<Age>28</Age>
</Table>
<Table>
<Id>165</Id>
<Name>张</Name>
<Sex>女</Sex>
<Age>21</Age>
</Table>
<Table>
<Id>168</Id>
<Name>王超</Name>
<Sex>男</Sex>
<Age>22</Age>
</Table>
<Table>
<Id>169</Id>
<Name>张三</Name>
<Sex>男</Sex>
<Age>56</Age>
</Table>
<Table>
<Id>170</Id>
<Name>董</Name>
<Sex>男</Sex>
<Age>22</Age>
</Table>
<Table>
<Id>171</Id>
<Name>刘YI</Name>
<Sex>男</Sex>
<Age>28</Age>
</Table>
<Table>
<Id>172</Id>
<Name>李三四</Name>
<Sex>男</Sex>
<Age>22</Age>
</Table>
<Table>
<Id>173</Id>
<Name>李</Name>
<Sex>女</Sex>
<Age>26</Age>
</Table>
</Students>
程序代码如下
using System;
using System.Collections.Generic;
using System.Data;
using System.Xml;
namespace demo2
{
class Program
{
static void Main(string[] args)
{
List<Student> stuList = new List<Student>();
XmlDocument doc = new XmlDocument();
doc.Load(@"D:\abk.xml");//加载xml文档
XmlNode sn = doc.FirstChild;//根节点
XmlNodeList sList = sn.ChildNodes;//Student节点的集合
foreach(XmlNode stuNode in sList)
{
XmlNodeList filedList = stuNode.ChildNodes;
Student stu = new Student();
foreach (XmlNode filedNode in filedList)
{
if (filedNode.Name == "Id")
stu.Id = int.Parse(filedNode.InnerText);//节点之间的值强制转换后,赋给stu.Id
else if (filedNode.Name == "Name")
{
stu.Name = filedNode.InnerText;
}
else if (filedNode.Name == "Sex")
stu.Sex = filedNode.InnerText;
else
stu.Age = int.Parse(filedNode.InnerText);
}
stuList.Add(stu);
}
foreach(Student item in stuList)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
}
运行之后发现怎么都无法输出Xml文件中的内容
调试发现第一个foreach一直无法执行(直接被跳过)—无法读取Xml文件?
由于要读取根节点,就想着可不能是根节点未被读到
于是删除了Xml文件中的一段<?xml version=“1.0” standalone=“yes”?>
再次运行,正常输出
150李四男26
154李四男26
164王女28
165张女21
168王超男22
169张三男56
170董男22
171刘YI男28
172李三四男22
173李女26
拓展:int.Parse()
作用:数据转换,将数据强制转换为int类型
(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别
Convert.ToInt32 与 int.Parse 较为类似,实际上 Convert.ToInt32 内部调用了 int.Parse:
Convert.ToInt32 参数为 null 时,返回 0;
int.Parse 参数为 null 时,抛出异常;
Convert.ToInt32 参数为 “” 时,抛出异常;
int.Parse 参数为 “” 时,抛出异常;
Convert.ToInt32 可以转换的类型较多;
int.Parse 只能转换数字类型的字符串。
int.TryParse 与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。最后一个参数为输出值,如果转换失败,输出值为 0。