Xml文件读取的基本方法:
XmlReader类读取xml数据:
XmlReader xmlReader = XmlReader.Create("D:/user.xml");//使用静态方法获得对象
while(xmlReader.Read()) //使用Read函数返回的bool值配合while读取数据
{
switch (xmlReader.Name)
{
case "user":
Console.WriteLine();
//用于判断具有ID属性的首尾节点不会重复读取
if (xmlReader.MoveToAttribute("ID"))
{
//不同等级的节点,读取函数有差别
Console.WriteLine("第{0}个用户:", xmlReader.ReadContentAsString());
}
break;
case "name":
Console.WriteLine("姓名:" + xmlReader.ReadElementContentAsString());
break;
case "hobbies":
//用于判断具有子节点的节点是否是头节点,如果不是就跳过
if (xmlReader.IsStartElement())
Console.Write("爱好:");
break;
case "hobby":
Console.Write(" " + xmlReader.ReadElementContentAsString());
break;
}
}
代码中操作的xml文件 (此文件中只有一个用户)
<userRoot>
<user ID="1">
<name>乔治</name>
<hobbies>
<hobby>恐龙</hobby>
<hobby>泥坑</hobby>
</hobbies>
</user>
</userRoot>
XmlDocument类读取xml数据:
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load("D:/user.xml");
XmlElement xmlElement = xmlDocument.DocumentElement;
Console.WriteLine(xmlElement.ChildNodes.Count); //显示比根节点低一级的节点的数目
foreach(XmlNode userNode in xmlElement.ChildNodes)
{
Console.WriteLine();
Console.WriteLine("ID:" + userNode.Attributes["ID"].Value);
foreach(XmlNode item in userNode.ChildNodes)
{
switch (item.Name)
{
case "name":
//InnerText读取此节点内的数据(所以要注意区分节点类型)
Console.WriteLine("name:" + item.InnerText);
break;
case "hobbies":
Console.Write("hobbies:");
foreach(XmlNode i in item.ChildNodes)
{
Console.Write(" " + i.InnerText);
}
break;
}
}
}
LINQ to Xml
使用XElement类,它表示一个XML元素,可以使用该类创建元素;更改元素内容;添加、更改或者删除子元素;向元素中添加属性;或以文本格式序列化元素内容;
XElement xElement = XElement.Load("C:/Users/康晨晨/Desktop/user.xml");
var query = from item in xElement.Elements("user")
select new
{
name = item.Element("name").Value,
age = item.Element("age").Value,
sex = item.Element("sex").Value
};