如何在c#中使用DOM在现有XML文件中添加具有值的新子文件

本文关键字:文件 添加 DOM XML | 更新日期: 2023-09-27 18:12:21

我已经有了一个XML文件,它的结构是这样的:

<?xml version="1.0" encoding="utf-16"?>
<configuration>
  <FilePath>C:'Recordings</FilePath>
  <Timer>2</Timer>
</configuration>

我想在<configuration>中再添加一个子节点,并希望得到如下所示的新结构。此外,在添加之前,我还想确保添加的新子元素是否存在。

<?xml version="1.0" encoding="utf-16"?>
<configuration>
  <FilePath>C:'Recordings</FilePath>
  <Timer>2</Timer>
  <LastSyncTime>Some Value</LastSyncTime>
</configuration>

如果<LastSyncTime>不存在,则只能添加它,否则不添加。

到目前为止,我已经尝试如下:

try
{
    XmlDocument doc = new XmlDocument();
    doc.Load(newpath);
    XmlNodeList nodes = doc.SelectNodes("LastSyncDateTime");

    if(nodes.Count == 0)    //Means LastSyncDateTime node does not exist
    {
        XmlNode mynode = doc.CreateNode(XmlNodeType.Text, "LastSyncDateTime",null);
        mynode.Value = DateTime.Now.ToString() + "";
        doc.AppendChild(mynode);
    }
    foreach (XmlNode node in nodes)
    {
        if (node.LastChild != null)
        {
            LastSyncDateTime = (node.LastChild.InnerText);
            Console.WriteLine("Last Date Time is : " + LastSyncDateTime);
        }
    }
}
catch (Exception ex)
{
    //throw ex;
    string str = (String.Format("{0} {1}", ex.Message, ex.StackTrace));
    Console.WriteLine(str);
}

但是我得到了例外。请建议我最好的工作解决方案。由于

编辑:我得到以下例外:

[System.InvalidOperationException] = {"The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type."}

如何在c#中使用DOM在现有XML文件中添加具有值的新子文件

你应该用XmlNodeType.Element而不是XmlNodeType.Text。它还需要一些其他的修复,如下所示:

.....
XmlNodeList nodes = doc.SelectNodes("//LastSyncDateTime");
if (nodes.Count == 0)    //Means LastSyncDateTime node does not exist
{
    XmlNode mynode = doc.CreateNode(XmlNodeType.Element, "LastSyncDateTime", null);
    //set InnerText instead of Value
    mynode.InnerText = DateTime.Now.ToString();
    //append to root node (DocumentElement)
    doc.DocumentElement.AppendChild(mynode);
}
.....