c# - 无法在 C# 中对 XmlDocument 使用 InsertAfter

标签 c# xml insertafter

下面是 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 并将新的 ECU 节点作为主 ver 元素的子节点,而不是 InsertAfter:

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);
}

关于c# - 无法在 C# 中对 XmlDocument 使用 InsertAfter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976315/

相关文章:

c# - 传递参数

c# - ASP.NET 缓存 - 直接赋值和 Add() 或 Insert() 有什么区别

c# - 在 ListView 中双击 Item 时获取 SubItem 值

xml - XPath 选择节点直到条件

xml - Apache cxf 网络服务 : tomcat is showing requested resource not found while server is up for <soap:address>

html - 如何在另一个元素之后添加一个元素?

C# - 动态访问变量名称

xml - Eclipse XML 格式化程序插入不需要的换行符

jquery - Marionette CompositeView AttachHtml after 而不是追加

JQuery .insertAfter 在此示例中不起作用 - 为什么?