无法在 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的父节点。
您好,下面是 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的父节点。