下面是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>我正在使用下面的代码从xmls文件夹中读取第一个作为主xml和其他文件的文件。我想在主文件的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语句中得到了错误,因为对象引用没有设置为对象的实例。
请给我任何解决办法。
发布于 2017-02-01 09:47:04
您的tempNode来自xdoc文档上下文。应该将它导入到xmlMaster文档上下文中:
XmlNode importedECU = xmlMaster.ImportNode(tempNode, true);另外,与InsertAfter不同,最好使用AppendChild并将新的ver节点作为主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);
}发布于 2017-02-01 10:23:04
您的InsertAfter应该位于要插入的节点的parentNode上,因此是tempNode的父节点。
https://stackoverflow.com/questions/41976315
复制相似问题