C# xml配置文件的操作

xml文件是配置文件的常用格式,C#中操作常用Linq方式,本文简单介绍其用法。

首先需要包含Linq,

using System.Xml.Linq;

如项目中的xml文件格式如下,

<?xml version="1.0" encoding="utf-8"?>
<channelconfig Company="zkmrobot" Board="usb3210">
  <channel Type="Force" CHSN="F1-01" SN="080401" Name="CH01">
    <x0>0.602</x0>
    <y0>50.00</y0>
    <x1>3.680</x1>
    <y1>300.00</y1>
    <offset>0.00</offset>
  </channel>

</channelconfig>

创建对应的操作类

class ChannelConfig
    {
        private string channelName;

private double x0;
        private double y0;
        private double x1;
        private double y1;
        private double offset;

public ChannelConfig()
        { }

public string ChannelName
        {
            get { return channelName; }
            set { channelName = value; }
        }

public double X0
        {
            get { return x0; }
            set { x0 = value; }
        }

public double Y0
        {
            get { return y0; }
            set { y0 = value; }
        }

public double X1
        {
            get { return x1; }
            set { x1 = value; }
        }

public double Y1
        {
            get { return y1; }
            set { y1 = value; }
        }

public double Offset
        {
            get { return offset; }
            set { offset = value; }
        }
    
    }

通道参数配置界面如下,

仅需要加一个DataGridView控件与两个按钮控件。

DataGridView控件用来显示与操作xml中的文件,中间的桥梁就是上面设计的配置类。

具体动作由两个按钮来完成。代码贴在窗口下面

public partial class Form3 : Form
    {
        List <ChannelConfig> ChannelconfigList = new List<ChannelConfig>();

public Form3()
        {
            InitializeComponent();
        }

private void Form3_Load(object sender, EventArgs e)
        {
            buttonReadAll_Click(sender,e);
            
        }

private void buttonReadAll_Click(object sender, EventArgs e)
        {
            //XmlDocumentReadAll();
            LinqReadAll();
        }

private void LinqReadAll()
        {
            XElement xe = XElement.Load(@"..\..\channel.xml");
            IEnumerable<XElement> elements = from ele in xe.Elements("channel") select ele;
            showInfoByElements(elements);
        }

private void showInfoByElements(IEnumerable<XElement> elements)
        {
            foreach (var ele in elements)
            {
                ChannelConfig channelConfig = new ChannelConfig();
                channelConfig.X0 = Convert.ToDouble(ele.Element("x0").Value);
                channelConfig.Y0 = Convert.ToDouble(ele.Element("y0").Value);
                channelConfig.X1 = Convert.ToDouble(ele.Element("x1").Value);
                channelConfig.Y1 = Convert.ToDouble(ele.Element("y1").Value);
                channelConfig.Offset = Convert.ToDouble(ele.Element("offset").Value);
                channelConfig.ChannelName = ele.Attribute("Name").Value;

ChannelconfigList.Add(channelConfig);
             }

dgvChannelConfig.GridColor = Color.Blue;
            dgvChannelConfig.DataSource = ChannelconfigList;
       }

private void XmlDocumentReadAll()
        {
            XmlDocument xmlDoc = new XmlDocument();
            try
            {
                xmlDoc.Load(@"..\..\channel.xml");
            }
            catch (Exception ep)
            {
                MessageBox.Show(ep.ToString());
            }

//得到根节点channelconfig
            XmlNode xn = xmlDoc.SelectSingleNode("channelconfig");

//得到根节点的所有子节点
            XmlNodeList xnl = xn.ChildNodes;

foreach (XmlNode xn1 in xnl)
            {
                ChannelConfig channelConfig = new ChannelConfig();

// 将节点转换为元素,便于得到节点的属性值
                XmlElement xe = (XmlElement)xn1;

//得到Name属性的属性值
                channelConfig.ChannelName = xe.GetAttribute("Name").ToString();

// 得到channel节点的所有子节点
                XmlNodeList xnl0 = xe.ChildNodes;

channelConfig.X0 = Convert.ToDouble(xnl0.Item(0).InnerText);
                channelConfig.Y0 = Convert.ToDouble(xnl0.Item(1).InnerText);

channelConfig.X1 = Convert.ToDouble(xnl0.Item(2).InnerText);
                channelConfig.Y1 = Convert.ToDouble(xnl0.Item(3).InnerText);
                channelConfig.Offset = Convert.ToDouble(xnl0.Item(4).InnerText);

ChannelconfigList.Add(channelConfig);
            }

dgvChannelConfig.GridColor = Color.Blue;
            dgvChannelConfig.DataSource = ChannelconfigList;
        }

private void buttonSaveCurrent_Click(object sender, EventArgs e)
        {
            XElement xe = XElement.Load(@"..\..\channel.xml");
            if (dgvChannelConfig.CurrentRow != null)
            {
                //dgvChannelConfig.CurrentRow.Cells[0]对应着CHANNEL Name
                string id = dgvChannelConfig.CurrentRow.Cells[0].Value.ToString();
                IEnumerable<XElement> element = from ele in xe.Elements("channel")
                                         where ele.Attribute("Name").Value == id
                                         select ele;
                if (element.Count() > 0)
                {
                    XElement first = element.First();
                    //设置新的属性
                    first.SetAttributeValue("Name", dgvChannelConfig.CurrentRow.Cells[0].Value.ToString());

//替换新的节点
                    first.ReplaceNodes(
                        new XElement("x0", dgvChannelConfig.CurrentRow.Cells[1].Value.ToString()),
                        new XElement("y0", dgvChannelConfig.CurrentRow.Cells[2].Value.ToString()),
                        new XElement("x1", dgvChannelConfig.CurrentRow.Cells[3].Value.ToString()),
                        new XElement("y1", dgvChannelConfig.CurrentRow.Cells[4].Value.ToString()),
                        new XElement("offset", dgvChannelConfig.CurrentRow.Cells[5].Value.ToString())
                      );
                }

xe.Save(@"..\..\channel.xml");
                buttonReadAll_Click(sender, e);
            }
        }

}

时间: 2024-10-13 23:54:07

C# xml配置文件的操作的相关文章

Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个类,在类中有个方法(非静态的方法),要调用类中的这个方法,则需要创建类的对象,使用对象调用方法.创建类对象的过程,需要new出来对象:而ioc则是将对象的创建不是通过new方式实现,而是交给spring配置来创建对象(即,将对象的创建交给spring来管理): spring是一站式框架 spring

使用枚举单例实现Xml、properties属性配置文件的操作

上一篇文章,介绍了java中四种单例设计模式:其中,可以使用枚举类型方式实现单例设计模式,但是实现的例子比较简单,本文将通过枚举单例,实现如何同时读取xml.properties属性配置文件.在回味枚举单例的使用同时,介绍一些属性配置文件的使用方式. 1.代码实现 package com.prop.io; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; impo

Service系统服务(一):安装一个KVM服务器、KVM平台构建及简单管理、virsh基本管理操作、xml配置文件的应用、为虚拟机制作快照备份、快建新虚拟机

一.安装一个KVM服务器 目标: 本例要求准备一台 RHEL7.2 服务器,将其搭建为KVM平台,主要完成下列操作: 1> 关闭本机的SELinux保护.防火墙服务   2> 挂载RHEL7光盘到 /mnt/dvd,将其配置为本机YUM源(baseurl = file:///mnt/dvd)   3> 安装KVM相关包组,确保已启用 libvirtd 服务 方案: RHEL7中的虚拟化服务软件组: 1> 虚拟化平台 -- "Virtualization Platform&

Spring中c3p0连接池的配置 及JdbcTemplate的使用 通过XML配置文件注入各种需要对象的操作 来完成数据库添加Add()方法

通过配置文件XML方法的配置 可以使用非常简练的Service类 UserService类代码如下: package com.swift; public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public boolean add() { return userDao.add(); } } UserService

struts2中struts.xml配置文件详解

struts.xml的常用配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts

【XML配置文件读取】使用jdom读取XML配置文件信息

在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式. 下面将介绍如何通过jdom来读取xml配置文件信息. 配置文件信息 <?xml version="1.0" encoding="UTF-8"?> <config> <base-config> <stringValue>Hello world</stringValue> <integerValue>8</integ

Mybatis3源码分析(三):解析mapper的xml配置文件

这一章我们来看看mybatis是怎么读取mapper的xml配置文件并解析其中的sql语句. 我们还记得是这样配置sqlSessionFactory的: <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" />

Struts2框架中书写XML配置文件时能添加提示技巧(方案二)

1.  先在/工程名/WebRoot/WEB-INF/lib/struts2-core-2.1.8.jar中找到struts-2.1.dtd文件. 2.  在Myeclipse8.6-->Window-->Preferences 3.  在搜索框输入xml文件,找到XMLCatalog,单击XML Catalog出现如上页面,之后单击Add按钮,出现如下图: 4.  在Location中选择FileSystem,选择struts-2.1.dtd文件的位置,如果这个文件在工程里面,可以使用Wor

dom4j解析XML的CURD操作

在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整个XML文件读到内容,形成一个倒状的树形结构. SAX是一个一个的将XML文件中的元素加载的内存,不会形成一个倒状的树形结构. 常用dom4j的api: 主要使用到SAXReader类 SAXReader:表示DOM4J解析器 saxReader.read():加载需要解析的xml文件,返回docu