我目前有一个包含这样的节点的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);
我得到了这个例外:
此操作会创建一个结构不正确的文档。
我怎样才能让它发挥作用?...谢谢!
答案 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;