首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在InsertAfter中为XmlDocument使用c#

问无法在InsertAfter中为XmlDocument使用c#
EN

Stack Overflow用户
提问于 2017-02-01 09:36:04
回答 2查看 1K关注 0票数 2

下面是XML文件,它是主XML。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-16"?>
 <Verify>
  <ver>
     <ECU>
      <values>
      </values>
     </ECU>
  </ver>
 </Verify>

我有多个文件,它们的结构如下所示

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-16"?>
 <Verify>
  <ver>
     <ECU>
      <values>
      </values>
     </ECU>
  </ver>
 </Verify>

我想要我的输出

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-16"?>
 <Verify>
  <ver>
     <ECU>
      <values>
      </values>
     </ECU>

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

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

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

代码语言:javascript
复制
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语句中得到了错误,因为对象引用没有设置为对象的实例。

请给我任何解决办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 09:47:04

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

代码语言:javascript
复制
XmlNode importedECU = xmlMaster.ImportNode(tempNode, true);

另外,与InsertAfter不同,最好使用AppendChild并将新的ver节点作为主ver元素的子节点:

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2017-02-01 10:23:04

您的InsertAfter应该位于要插入的节点的parentNode上,因此是tempNode的父节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41976315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档