C# 读取和修改自定义config文件

HUAFEIS 2014-11-05 08:46:22
现有个NLog.Config文件,内容如下

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true">

<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<!-- add your targets here -->

<!--<target xsi:type="File" name="f" fileName="${basedir}/nlogs/${shortdate}.log"
layout="${longdate} [${uppercase:${level}}] [${callsite}] : ${message}" />-->
<target xsi:type="File" name="fee" fileName="${basedir}/nlogs/${shortdate}.log"
layout="${time} ${uppercase:${level}} ${message}" />
</targets>

<rules>
<!-- add your logging rules here -->
<logger name="*" minlevel="trace" writeTo="fee" />

<!--<logger name="f2" minlevel="trace" writeTo="f2" />-->

</rules>
</nlog>


我现在要动态修改<rules>节点下logger的minlevel属性。试过多种方法,无法获取,求指教!

...全文
667 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
smthgdin_020 2014-11-06
  • 打赏
  • 举报
回复
引用 5 楼 lovelj2012 的回复:
[quote=引用 3 楼 smthgdin 的回复:] 你那个是因为命名空间原因。 仅供参考。 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable); if (!nsManager.HasNamespace(namespacePrefix)) nsManager.AddNamespace(namespacePrefix, namespaceString); //得到节点数组 xmlDoc.SelectNodes(xpath, nsManager) ; //得到当节点 xmlDoc.SelectSingleNode(xpath, nsManager)
这种解析方法指定不行! XmlNamespaceManager是针对第一个节点(也就是<? xml ?>)含有命名空间的xml,如下面这种 <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">[/quote] 没关系的。我们项目的nlog也是这么用。
HUAFEIS 2014-11-06
  • 打赏
  • 举报
回复
引用 6 楼 sunny906 的回复:

            string path = "C:\\1.xml";
            XDocument xml = XDocument.Load(path);
            xml.Elements().First().Elements().Single(x => x.Name.LocalName == "rules").Elements().Single(x => x.Name.LocalName == "logger").SetAttributeValue("minlevel", "newvalue");
            xml.Save(path);
谢了,兄弟
sunny906 2014-11-06
  • 打赏
  • 举报
回复

            string path = "C:\\1.xml";
            XDocument xml = XDocument.Load(path);
            xml.Elements().First().Elements().Single(x => x.Name.LocalName == "rules").Elements().Single(x => x.Name.LocalName == "logger").SetAttributeValue("minlevel", "newvalue");
            xml.Save(path);
江南小鱼 2014-11-05
  • 打赏
  • 举报
回复
引用 3 楼 smthgdin 的回复:
你那个是因为命名空间原因。 仅供参考。 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable); if (!nsManager.HasNamespace(namespacePrefix)) nsManager.AddNamespace(namespacePrefix, namespaceString); //得到节点数组 xmlDoc.SelectNodes(xpath, nsManager) ; //得到当节点 xmlDoc.SelectSingleNode(xpath, nsManager)
这种解析方法指定不行! XmlNamespaceManager是针对第一个节点(也就是<? xml ?>)含有命名空间的xml,如下面这种 <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
wind_cloud2011 2014-11-05
  • 打赏
  • 举报
回复
DataSet ds = new DataSet(); ds.ReadXml("a.config"); for (int i = 0; i < ds.Tables["logger"].Rows.Count; i++) { ds.Tables["logger"].Rows[i][1]=222; } ds.WriteXml("a.config");
smthgdin_020 2014-11-05
  • 打赏
  • 举报
回复
你那个是因为命名空间原因。 仅供参考。 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable); if (!nsManager.HasNamespace(namespacePrefix)) nsManager.AddNamespace(namespacePrefix, namespaceString); //得到节点数组 xmlDoc.SelectNodes(xpath, nsManager) ; //得到当节点 xmlDoc.SelectSingleNode(xpath, nsManager)
江南小鱼 2014-11-05
  • 打赏
  • 举报
回复 1
引用 1 楼 iyomumx 的回复:
var xe = XElement.Load("t.xml");//改成xml的路径,或者用流,具体参考MSDN
var xns = xe.GetDefaultNamespace();
var minlevelattr = xe.Descendants(xns + "rules").Elements(xns + "logger").Attributes("minlevel").FirstOrDefault();
if (minlevelattr != null)
{
	minlevelattr.Value = "debug"; //改成你想要的值
}
xe.Save("t.xml");//保存路径
Xml.Linq很强大
iyomumx 2014-11-05
  • 打赏
  • 举报
回复 1
var xe = XElement.Load("t.xml");//改成xml的路径,或者用流,具体参考MSDN
var xns = xe.GetDefaultNamespace();
var minlevelattr = xe.Descendants(xns + "rules").Elements(xns + "logger").Attributes("minlevel").FirstOrDefault();
if (minlevelattr != null)
{
	minlevelattr.Value = "debug"; //改成你想要的值
}
xe.Save("t.xml");//保存路径

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧