在不删除现有字符串的情况下向XML文件添加字符串
本文关键字:字符串 XML 文件 添加 情况下 删除 | 更新日期: 2023-09-27 18:12:32
这个问题有两个部分:首先,我需要能够在文档中添加文本到XML元素的内容,当用户单击我的程序中的' add Note'按钮时。我能做这件事,没问题。然而,如果用户以后想要添加更多的笔记,原始笔记将被删除,因为我调用了'setElementValue'方法。是否有一种替代方法,以便将注释添加到现有文本中,而不是替换现有文本?
public static void addNote(ListViewItem file, string note)
{
int i = 0;
while (i < 20)
{
try
{
XDocument doc = XDocument.Load(Form1.CSDBpath + Form1.projectName + "''Data.xml");
string name = file.Text;
var el = (from item in doc.Descendants("dataModule")
where item.Descendants("DMC").First().Value == name
select item).First();
if (el != null)
{
el.SetElementValue("notes", note);
}
doc.Save(Form1.CSDBpath + Form1.projectName + "''Data.xml");
return;
}
catch
{
i++;
}
}
MessageBox.Show("Please try again in a moment, system busy (3)", "DAWS");
}
问题的第二部分:正如您在我的代码中所看到的,我需要访问并写入一个xml数据文件,该文件存储了许多文件的各种信息(包括上述问题中的注释)。这个xml数据文件由多个用户共享,有时他们的系统试图同时访问该文件,这显然会导致问题。我通过循环一组次数来解决这个问题-使程序反复尝试打开并写入xml文件。我是按照公认的方式来做这件事,还是有更好的方法?
如何:
el.SetElementValue("notes", el.value + " " + note);
至于第二部分,它听起来不像是一个非常可扩展的解决方案。编写一个小的服务(例如WCF)并让它访问一组文件怎么样?
if (string.IsNullOrWhiteSpace(el.Value))
el.Value = note;
else
el.Value += Environment.NewLine + note;
对于第二个问题,您可能希望将文件保存为新的文件名(data.xml.tmp),然后调用File.Move
来重命名它。这样,该文件在较短的时间内将无法访问。
还要回顾System.IO.Path.Combine()
-您不应该将路径连接为字符串
我不确定您的XML代码看起来如何,如果有一个示例就好了,但是您可以尝试使用XmlNode的ParentNode和AppendChild添加兄弟姐妹。
同样,如果序列可能为空,则不应该使用First()。使用FirstOrDefault