C#读取xml文件

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




    }
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值