C#读取xml文件
2016-03-25 17:51
555 查看
<?xml version="1.0" encoding="utf-8" ?> <root> <person name="1" age="25"/> <person name="2" age="56"/> </root>
XmlDocument doc = new XmlDocument(); doc.Load("hello.xml"); XmlElement rootElem = doc.DocumentElement; XmlNodeList personNodes = rootElem.GetElementsByTagName("person"); //获取person子节点集合 for (int i = 0; i < personNodes.Count; i++) { MessageBox.Show(((XmlElement)personNodes.Item(i)).GetAttribute("name")); MessageBox.Show(((XmlElement)personNodes.Item(i)).GetAttribute("age")); }
xml文件为
<?xml version="1.0" encoding="utf-8"?> <shcool> <class name="jk1702"> <student studentId="1340501170200" name="无名wq" /> <student studentId="1340501170201" name="有名32" /> </class> <class name="jk1701"> <student studentId="1340501170101" name="有名32" /> <student studentId="1340501170102" name="有名32" /> </class> <class name="jk1703"> </class> </shcool>
modle
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace xmlLearn { class Student { private string studentId; public string StudentId { get { return studentId; } set { studentId = value; } } private string studentName; public string StudentName { get { return studentName; } set { studentName = value; } } private string classNo; public string ClassNo { get { return classNo; } set { classNo = value; } } } }
xml的操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.ObjectModel; using System.IO; using System.Xml.Linq; using System.Xml; namespace xmlLearn { class readXml { /// <summary> /// 查询xml /// </summary> /// <param name="path"></param> /// <returns></returns> public static ObservableCollection<Student> getXml(string path) { ObservableCollection<Student> obs = new ObservableCollection<Student>(); if (File.Exists(path)) { XDocument doc = XDocument.Load(path); if (doc != null) { IEnumerable<XElement> elementlist = doc.Root.Elements("class"); foreach (var item in elementlist) { IEnumerable<XElement> informationElem = item.Elements("student"); string name = item.Attribute("name").Value; foreach (var student in informationElem) { Student stu = new Student() { ClassNo=name, StudentId = student.Attribute("studentId").Value, StudentName = student.Attribute("name").Value }; obs.Add(stu); } } return obs; } } return null; } /// <summary> /// 修改xml /// </summary> /// <param name="stu"></param> /// <param name="root"></param> /// <param name="path"></param> /// <returns></returns> public static int update(Student stu,string root,string path) { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode node = doc.SelectSingleNode(root); XmlNodeList xnl = node.ChildNodes; foreach (var cl in xnl) { XmlElement xe = cl as XmlElement; string name = xe.GetAttribute("name"); XmlNodeList xml = xe.ChildNodes; if (name.Equals(stu.ClassNo)) { foreach (var student in xml) { XmlElement xel = student as XmlElement; string student_id = xel.GetAttribute("studentId"); if (student_id == stu.StudentId) { xel.SetAttribute("name", stu.StudentName); doc.Save(path); return 1; } } } } return -1; } /// <summary> /// 查找是否存在此项 /// </summary> /// <param name="stu"></param> /// <param name="root"></param> /// <param name="path"></param> /// <returns>-1表示 班级和学号都不存在 0表示班级存在学号不存在 1表示该条消息存在</returns> private static int lookXml(Student stu, string root, string path) { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode node = doc.SelectSingleNode(root); XmlNodeList xnl = node.ChildNodes; foreach (var cl in xnl) { XmlElement xe = cl as XmlElement; string name = xe.GetAttribute("name"); XmlNodeList xml = xe.ChildNodes; if (name == stu.ClassNo) { foreach (var student in xml) { XmlElement xel = student as XmlElement; string student_id = xel.GetAttribute("studentId"); if (student_id == stu.StudentId) { return 1; } } return 0; } } return -1; } /// <summary> /// 增加 /// </summary> /// <param name="stu"></param> /// <param name="root"></param> /// <param name="path"></param> /// <returns></returns> public static int addXml(Student stu, string root, string path) { int isExitis = lookXml(stu, root, path); XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode node = doc.SelectSingleNode(root); XmlNodeList xnl = node.ChildNodes; switch (isExitis) { case -1: XmlElement xe1 = doc.CreateElement("class"); xe1.SetAttribute("name", stu.ClassNo); XmlElement xe2 = doc.CreateElement("student"); xe2.SetAttribute("studentId", stu.StudentId); xe2.SetAttribute("name", stu.StudentName); xe1.AppendChild(xe2); node.AppendChild(xe1); doc.Save(path); break; case 0: foreach (var cl in xnl) { XmlElement xe = cl as XmlElement; string name = xe.GetAttribute("name"); XmlNodeList xml = xe.ChildNodes; if (name == stu.ClassNo) { XmlElement xel2 = doc.CreateElement("student"); xel2.SetAttribute("studentId", stu.StudentId); xel2.SetAttribute("name", stu.StudentName); xe.AppendChild(xel2); doc.Save(path); } } break; case 1: return -1; } return 1; } /// <summary> /// 删除 /// </summary> /// <param name="stu"></param> /// <param name="root"></param> /// <param name="path"></param> /// <returns></returns> public static int delXml(Student stu, string root, string path) { int isExitis = lookXml(stu, root, path); if (isExitis == -1||isExitis==0) { return -1; } XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode node = doc.SelectSingleNode(root); XmlNodeList xnl = node.ChildNodes; foreach (var cl in xnl) { XmlElement xe = cl as XmlElement; string name = xe.GetAttribute("name"); XmlNodeList xml = xe.ChildNodes; if (name == stu.ClassNo) { foreach (var student in xml) { XmlElement xel = student as XmlElement; string student_id = xel.GetAttribute("studentId"); if (student_id == stu.StudentId) { xe.RemoveChild(xel); doc.Save(path); return 1; } } } } return 0; } } }
界面
<Window x:Class="xmlLearn.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="348" Width="568"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="366*" /> <ColumnDefinition Width="137*" /> </Grid.ColumnDefinitions> <GroupBox Header="Hello World" Grid.ColumnSpan="1"> <ListView Name="list1" Margin="0" SelectionChanged="list1_SelectionChanged"> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding StudentId}" Header="学号" Width="100"/> <GridViewColumn DisplayMemberBinding="{Binding StudentName}" Header="姓名" Width="100"/> <GridViewColumn DisplayMemberBinding="{Binding ClassNo}" Header="班级" Width="100"/> </GridView> </ListView.View> </ListView> </GroupBox> <GroupBox Header="设置界面" Grid.Column="1"> <Grid> <Label Content="学号" Height="28" HorizontalAlignment="Center" Margin="47,3,44,0" Name="l_studentNo" VerticalAlignment="Top" /> <TextBox Height="23" HorizontalAlignment="Center" Margin="6,37,11,0" Name="t_studentNo" VerticalAlignment="Top" Width="120" /> <Label Content="姓名" Height="28" HorizontalAlignment="Center" Margin="50,66,41,0" Name="l_studentName" VerticalAlignment="Top" /> <TextBox Height="23" HorizontalAlignment="Center" Margin="5,94,0,0" Name="t_studentName" VerticalAlignment="Top" Width="120" /> <Label Content="班级" Height="28" HorizontalAlignment="Center" Margin="49,127,42,0" Name="l_classNo" VerticalAlignment="Top" /> <TextBox Height="23" HorizontalAlignment="Center" Margin="5,154,0,0" Name="t_classNo" VerticalAlignment="Top" Width="120" /> <Button Content="增加" Height="23" HorizontalAlignment="Center" Margin="37,185,47,0" Name="button1" VerticalAlignment="Top" Width="53" Click="button1_Click" /> <Button Content="修改" Height="23" HorizontalAlignment="Center" Margin="37,214,47,49" Name="button2" VerticalAlignment="Top" Width="53" Click="button2_Click" /> <Button Content="删除" Height="23" HorizontalAlignment="Center" Margin="37,243,47,0" Name="button3" VerticalAlignment="Top" Width="53" Click="button3_Click" /> </Grid> </GroupBox> </Grid> </Window>
界面
入口类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Xml.Linq; using System.Collections.ObjectModel; namespace xmlLearn { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Init(); } ObservableCollection<Student> obs = new ObservableCollection<Student>(); private void Init() { string path = System.IO.Directory.GetCurrentDirectory() + "\\XH.xml"; //obs.Clear(); obs = readXml.getXml(path); list1.ItemsSource = obs; } /// <summary> /// listview /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void list1_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (list1.SelectedIndex < 0) { return; } t_classNo.Text = obs[list1.SelectedIndex].ClassNo; t_studentName.Text = obs[list1.SelectedIndex].StudentName; t_studentNo.Text = obs[list1.SelectedIndex].StudentId; } /// <summary> /// 修改 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, RoutedEventArgs e) { Student stu = new Student(); stu.StudentId = t_studentNo.Text; stu.ClassNo = t_classNo.Text; stu.StudentName = t_studentName.Text; string path = System.IO.Directory.GetCurrentDirectory() + "\\XH.xml"; readXml.update(stu, "shcool", path); Init(); } /// <summary> /// 增加 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, RoutedEventArgs e) { Student stu = new Student(); stu.StudentId = t_studentNo.Text; stu.ClassNo = t_classNo.Text; stu.StudentName = t_studentName.Text; string path = System.IO.Directory.GetCurrentDirectory() + "\\XH.xml"; readXml.addXml(stu, "shcool", path); Init(); } /// <summary> /// 删除 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, RoutedEventArgs e) { Student stu = new Student(); stu.StudentId = t_studentNo.Text; stu.ClassNo = t_classNo.Text; stu.StudentName = t_studentName.Text; string path = System.IO.Directory.GetCurrentDirectory() + "\\XH.xml"; readXml.delXml(stu, "shcool", path); Init(); } } }
相关文章推荐
- C#基础:关键字和数据类型
- C#设置WinForm快捷键
- C#基础:命令解析
- c#基础: NetWorkStream类的主要属性
- c#基础: 线程的初级用法总结
- C#基础:集合
- 输入某人出生日期,计算年龄和距60岁的天数
- C#里partial关键字的作用(转摘)
- 2016年c#实验3.3:录入学号和姓名
- C#数组冒泡排序
- C# 文件压缩与解压(ZIP)基于 .Net Framework
- C#Chart 格控件的一些使用心得
- .NET/C# RabbitMQ
- C#——Random类猜数字
- C#上机实验(二)
- C#实验2.4
- C# 中const和readonly的区别
- 2016年c#:猜数字
- C#设备处理类操作
- 猜数字