无法在 C# 中对 XmlDocument 使用 InsertAfter

Unable to use InsertAfter for XmlDocument in c#

您好,下面是 XML 个主文件 XML

<?xml version="1.0" encoding="utf-16"?>
 <Verify>
  <ver>
     <ECU>
      <values>
      </values>
     </ECU>
  </ver>
 </Verify>

我有多个文件,其结构如下

<?xml version="1.0" encoding="utf-16"?>
 <Verify>
  <ver>
     <ECU>
      <values>
      </values>
     </ECU>
  </ver>
 </Verify>

我希望输出为

<?xml version="1.0" encoding="utf-16"?>
 <Verify>
  <ver>
     <ECU>
      <values>
      </values>
     </ECU>

     <ECU>
      <values>
      </values>
     </ECU>

     <ECU>
      <values>
      </values>
     </ECU>
  </ver>
 </Verify>

我正在使用下面的代码作为主人阅读第一个 xml 和 xmls 文件夹中的其他文件。我想从主文件的 ECU 节点下的这些文件中添加 ECU 节点。

XmlDocument xmlMaster = new XmlDocument();
        xmlMaster.Load(@"C:\MasterXMLFile.xml");
        XmlElement masterRoot = xmlMaster.DocumentElement;
        XmlNode masterParent = masterRoot.LastChild.LastChild;
        var downloadfolder = @"C:\AllXMLs\xmls\";
        string[] files = Directory.GetFiles(downloadfolder);
        foreach (var xx in files)
        {
            XmlNode masterNode = masterRoot.LastChild.LastChild;
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(xx);
            XmlElement root = xdoc.DocumentElement;
            XmlElement tempNode = (XmlElement)root.LastChild.LastChild;
            masterRoot.InsertAfter(tempNode, masterRoot.SelectSingleNode("//ECU").ParentNode);
        }
        xmlMaster.Save(@"C:\mergeg.xml");

我在 InsertAfter 语句中遇到错误,因为对象引用未设置为对象的实例。

请给我任何解决方案。

您的 tempNode 来自 xdoc 文档上下文。您应该将其导入 xmlMaster 文档上下文:

XmlNode importedECU = xmlMaster.ImportNode(tempNode, true);

此外,最好使用 AppendChild 而不是 InsertAfter 并将新的 ECU 节点附加为主 ver 元素的子节点:

var masterVer = masterRoot.SelectSingleNode("//ver");

foreach(var file in files)
{
   var xdoc = new XmlDocument();
   xdoc.Load(file);
   var tempNode = xdoc.DocumentElement.LastChild.LastChild;
   var importedECU = xmlMaster.ImportNode(tempNode, true); 
   masterVer.AppendChild(importedECU);
}

你的InsertAfter应该在你要插入的节点的parentNode上,也就是tempNode的父节点。