2011-09-26 117 views
1

我有這一段代碼,我使用添加某些元素添加元素XML:使用LINQ到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;」和「>」與「&gt;」這弄亂我的XML文件。

我該如何解決這一問題?

請注意請不要關注nlog,我很關心linqtoxml問題。

+1

快速注:有一個簡單的辦法讓我們不注意的代碼的特定部分...修剪出來的帖子。 (順便說一句,使用'如果(!nlog.Any())'比使用'如果(nlog.Count()== 0)'更好。) –

回答

4

您目前正在添加一個字符串。這將被添加爲內容。如果你想添加一個元素,你應該分析它,這樣第一:

XElement element = XElement.Parse(xmlTarget); 

或者preferrably,構建它,而不是:

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的對象。

+0

偉大的,它works..thanks – Stacker