将XML节点添加到现有XML配置文件中

时间:2015-07-21 18:25:45

标签: c# xml winforms

我目前有一个包含这样的节点的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>

该数据(&#34;评论&#34;,&#34; DestinationFolderPath&#34;等)当前存储在自定义对象的通用列表中 - 称为&#34; updatedStations&#34;。当我尝试像这样添加它们时:

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

...那&#34; updatedStation&#34;变量具有此值:

<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 个答案:

答案 0 :(得分: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;