使用linq to XML将元素添加到XML

时间:2011-09-26 11:47:42

标签: c# linq-to-xml

我有这段代码用于添加一些元素:

  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;” “&lt;”和“&gt;”用“&gt;”弄乱了我的xml文件。

我该如何解决这个问题?

注意请不要注意nlog,我关心linqtoxml问题。

1 个答案:

答案 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的对象。