我有这段代码用于添加一些元素:
string xmlTarget = string.Format(@"<target name='{0}' type='{1}' layout='${{2}}' />",
new object[] { target.Name, target.Type, target.Layout });
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var xmlDoc = XElement.Load(configuration.FilePath);
var nlog = xmlDoc.Elements("nlog");
if (nlog.Count() == 0)
{
return false;
}
xmlDoc.Elements("nlog").First().Elements("targets").First().Add(xmlTarget);
xmlDoc.Save(configuration.FilePath,SaveOptions.DisableFormatting);
configuration.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("nlog");
return true;
它应该向xml添加目标,问题是它替换“&lt;” “<
”和“&gt;”用“>
”弄乱了我的xml文件。
我该如何解决这个问题?
注意请不要注意nlog,我关心linqtoxml问题。
答案 0 :(得分:4)
您目前正在添加字符串。这将作为内容添加。如果要添加元素,则应首先解析它:
XElement element = XElement.Parse(xmlTarget);
或者最好是构建它:
XElement element = new XElement("target",
new XAttribute("type", target.Name),
new XAttribute("type", target.Type),
// It's not clear what your format string was trying to achieve here
new XAttribute("layout", target.Layout));
基本上,如果您发现自己使用字符串操作来创建XML然后解析它,那么您做错了。使用API本身构造基于XML的对象。