2015-07-21 2 views
0

я в настоящее время есть файл XML, содержащий узел, как это (в середине файла XML):Добавление XML-узлов в существующий файл XML конфигурации

<StationsSection> 
    <Stations /> 
</StationsSection> 

Мне нужно добавить к нему, так что становится это:

<StationsSection> 
    <Stations> 
     <add Comment="I'm here!" DestinationFolderPath="C:\" FtpHostname="ftp://upload.domain.com/" FtpFolderPath="myFolder/" FtpUsername="555" FtpPassword="secret!!!" FtpTimeoutInSeconds="20" /> 
     <add Comment="I'm here!" DestinationFolderPath="C:\" FtpHostname="ftp://upload.domain.com/" FtpFolderPath="myFolder/" FtpUsername="555" FtpPassword="secret!!!" FtpTimeoutInSeconds="20" /> 
    </Stations> 
</StationsSection> 

Эти данные («Комментарий», «DestinationFolderPath» и т.д.) в настоящее время хранится в общем списке пользовательского объекта - называется «updatedStations». Когда я пытаюсь добавить их как это:

foreach (var station in updatedStations) 
{ 
    XElement updatedStation = new XElement("add", elementToAdd); // "elementToAdd" has a value 
    xml.Add(updatedStation); // "xml" is an XDocument 
} 

... что "updatedStation" переменная имеет следующее значение:

<add>Comment="I'M HERE!" DestinationFolderPath="C:\" FtpHostname="myFolder/" FtpFolderPath="ftp://upload.domain.com/" FtpUsername="555" FtpPassword="secret!!!" FtpTimeoutInSeconds="20"</add> 

Когда он пытается эту строку:

xml.Add(updatedStation); 

Я получаю это исключение:

Эта операция создаст неверную строку документ.

Как я могу заставить это работать? ... Спасибо!

ответ

1

Не используйте строковые операции (например, updatedStation). Ниже приведен пример с Linq2Xml + XPath (предполагая, что вы можете получить детали updatedStation)

var xDoc = XDocument.Load(filename); 
var st = xDoc.XPathSelectElement("//StationsSection/Stations"); 
st.Add(new XElement(
      "add", 
      new XAttribute("Comment","I'm here"), 
      new XAttribute("DestinationFolderPath","C:\\") ) 
     ); 

PS: Не забудьте включить пространство имен

using System.Xml.XPath; 
using System.Xml.Linq; 
Смежные вопросы