下面是 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/