<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="LargePrintName" value="Zebra ZT410R (203 dpi)"/> <add key="SmallPrintName" value="Zebra ZT410R (203 dpi) #2"/> <add key="UrlPrefix" value="http://101.201.153.239:8071/api/"/> <add key="PageSize" value="10"/> <add key="LabelFormatRootDirectory" value="LabelFormat"/> <add key="LabelPrintTimeout" value="60"/> </appSettings> </configuration>
XElement xe = XElement.Load("RfidPrint.exe.config");//加载XML文件,获取其内容 XElement largeElement = (from ele in xe.Element("appSettings").Elements() where ele.Attribute("key").Value == largePrintName select ele).SingleOrDefault(); //获取 appSettings 节点下的所有子节点,找到子节点的属性 key 值为 largePrintName的,获取此节点 if (largeElement != null) { largeElement.Attribute("value").Value = txtLargePrinterName.Text; xe.Save("RfidPrint.exe.config"); } //将此节点的value属性改成 txtLargePrinterName.Text 保存即可
一开始我是想着是通过以下方式,直接获取我所要的add节点,开始操作,但是却无法实现,有些问题
XElement largeElement = (from ele in xe.Element("add") where ele.Attribute("key").Value == largePrintName select ele).SingleOrDefault(); //xe.Element("add") 获取的根本不是元素集合,只是单个对象,因此有问题
然后我想 直接获取 add 节点的集合,结果还是不起作用
XElement largeElement = (from ele in xe.Elements("add") where ele.Attribute("key").Value == largePrintName select ele).SingleOrDefault(); //问题在于其实 Elements 不是这么直接使用的,其实它是XElement对象的方法 //按照 XElement.Elements(节点名称) 这种方式来试用,如下
XElement largeElement = (from ele in xe.Element("appSettings").Elements("add") where ele.Attribute("key").Value == largePrintName select ele).SingleOrDefault(); if (largeElement != null) {` largeElement.Attribute("value").Value = txtLargePrinterName.Text; xe.Save("RfidPrint.exe.config"); }
注意点:我们对配置文件进行修改的话,程序必须重新启动一次才会生效,有的时候想避免这种情况,可以不用在配置文件中配置,而是另起一个 XML 文件进行配置,如此可以不用重启程序