您的位置:首页 > 编程语言 > C#

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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: