<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">裡面的第一個 xmlns 沒有 xmlns:xsi 這樣的別名,所以解決方法要嘛,把它補上 xmlns:xsd 之類的,要嘛就要在程式跑的過程裡面加回去,像
XmlElement _root; XmlDocument _xd = new XmlDocument(); _xd.Load(@"NLog.config"); _root = _xd.DocumentElement; var xmlNamespaces = _root.Attributes.Cast<XmlAttribute>().Where(attr => attr.Name.Contains("xmlns")); var incompleAttr = xmlNamespaces.FirstOrDefault(ns => ns.Name == "xmlns"); IEnumerable<XmlElement> range = null; XmlNamespaceManager nsmgr = null; if (incompleAttr != null) { nsmgr = new XmlNamespaceManager(_xd.NameTable); nsmgr.AddNamespace("xsd", incompleAttr.InnerText); range = _root.SelectNodes(@"xsd:rules/xsd:logger", nsmgr).Cast<XmlElement>(); } else { range = _root.SelectNodes(@"rules/logger").Cast<XmlElement>(); }
特別注意每一層都要加 rules/logger 就會變成 xsd:rules/xsd:logger。
ref: SOF、devioblog
沒有留言:
張貼留言