zoukankan      html  css  js  c++  java
  • 对配置文件 xml 进行操作

    个人喜欢用 Linq 的方式来进行操作,方便快捷

    <?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(节点名称) 这种方式来试用,如下

    思路应该是:首先获取一个父节点 xe.Element("appSettings") 然后获取父节点下的节点 add Elements("add") 然后再根据节点值,属性获取自己想要的节点进行一系列操作

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

    [参考资料](https://www.cnblogs.com/wujy/p/3366812.html)

    注意点:我们对配置文件进行修改的话,程序必须重新启动一次才会生效,有的时候想避免这种情况,可以不用在配置文件中配置,而是另起一个 XML 文件进行配置,如此可以不用重启程序

  • 相关阅读:
    POJ3294Life Forms(广义后缀自动机)(后缀数组+二分+数状数组)
    URAL1517Freedom of Choice(后缀数组)
    POJ2406Power Strings (最小循环节)(KMP||后缀数组)
    POJ2774Long Long Message (后缀数组&后缀自动机)
    SPOJ705 Distinct Substrings (后缀自动机&后缀数组)
    Nacos: Namespace 和 Endpoint 在生产环境下的最佳实践
    阿里PB级Kubernetes日志平台建设实践
    深度解读Helm 3: 犹抱琵琶半遮面
    开发者说:如何参与定义一款 IDE 插件
    从开源小白到 Apache Member,我的成长之路
  • 原文地址:https://www.cnblogs.com/wang-min/p/10334826.html
Copyright © 2011-2022 走看看