The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type
asp.net, asp.net-mvc-3, asp.net-mvc-4, c#, xml
Solution
The problem is that you are inserting an external xmlnode from different xml.
my edit is here, I use a workaround to load the xmlnode in the new document and then append it to your node
countNode.AppendChild(countNode.OwnerDocument.ImportNode(test, true));
try this solution
public void multipleXML()
{
XmlNode countNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "Count", null);
XmlNode productIdentifierNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "ProductIdentifier", null);
productIdentifierNode.InnerText = "123345";
XmlNode countDateTimeNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "CountDateTime", null);
countDateTimeNode.InnerText = DateTime.Now.ToString();
//XmlNode locationCountNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "LocationCounts", null);
countNode.AppendChild(productIdentifierNode);
countNode.AppendChild(countDateTimeNode);
var test = SetNewLocation("Bangalore", "30", "30");
countNode.AppendChild(countNode.OwnerDocument.ImportNode(test, true));
//countNode.AppendChild(test);//ERROR
HandlingXmlDoc.SelectSingleNode("//SHandling//Counting//Counts").AppendChild(countNode);
}
and another edit in SetNewLocation function
(my edit `return docCountXml.SelectSingleNode("LocationCount");`)
private XmlNode SetNewLocation(String location, String casesQuantity, String singlesQuantity)
{
XmlDocument docCountXml = new XmlDocument();
docCountXml.LoadXml(baseLocCountXML);
SetValue(docCountXml, "LocationCount/Name", location);
var xmlNodeList = docCountXml.SelectNodes("LocationCount/SCounts/SCount/Quantity");
xmlNodeList[0].FirstChild.Value = casesQuantity;
xmlNodeList[1].FirstChild.Value = singlesQuantity;
return docCountXml.SelectSingleNode("LocationCount");
}
for references here and here
Problem
I am dynamically building the xml through C# code and I get this error "The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong" This is my main class ``` internal class Program { private static void Main(string[] args) { CreateXml xml = new CreateXml(); xml.multipleXML(); } } ``` I have commented as “ERROR” below where i am getting run time exception. Please help how to fix this error. My Xml Class is here. ``` internal class CreateXml { private XmlDocument HandlingXmlDoc; private String baseHandlingXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?><SHandling><BLocation><SLocation><Identifier>02898</Identifier></SLocation></BLocation><Context><UserName>0289800001</UserName><Application>STOCK</Application></Context><Counting><SubmissionDateTime>2014-04-02T16:38:48.9345238+01:00</SubmissionDateTime><ProcessImmediately>YES</ProcessImmediately><Counts><Count><ProductIdentifier>050025488</ProductIdentifier><CountDateTime>2014-04-02T16:38:49.366567+01:00</CountDateTime><LocationCounts></LocationCounts></Count></Counts></Counting></SHandling>"; private XmlDocument locCountXmlDocument; private String baseLocCountXML = "<LocationCount><Name>Bangalore</Name><SCounts><SCount><Quantity>1</Quantity><UnitOfMeasure>CASES</UnitOfMeasure></SCount><SCount><Quantity>1</Quantity><UnitOfMeasure>SINGLES</UnitOfMeasure></SCount></SCounts></LocationCount>"; public CreateXml() { Initialise(); } public String GetStockHandlingXmlString { get { return HandlingXmlDoc.OuterXml; } } public XmlDocument GetStockHandlingXmlDocument { get { return HandlingXmlDoc; } } private void Initialise() { HandlingXmlDoc = new XmlDocument(); HandlingXmlDoc.LoadXml(baseHandlingXML); locCountXmlDocument = new XmlDocument(); locCountXmlDocument.LoadXml(baseLocCountXML); } public void multipleXML() { XmlNode countNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "Count", null); XmlNode productIdentifierNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "ProductIdentifier", null); productIdentifierNode.InnerText = "123345"; XmlNode countDateTimeNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "CountDateTime", null); countDateTimeNode.InnerText = DateTime.Now.ToString(); //XmlNode locationCountNode = HandlingXmlDoc.CreateNode(XmlNodeType.Element, "LocationCounts", null); countNode.AppendChild(productIdentifierNode); countNode.AppendChild(countDateTimeNode); countNode.AppendChild(SetNewLocation("Bangalore","30","30"));//ERROR HandlingXmlDoc.SelectSingleNode("//SHandling//Counting//Counts").AppendChild(countNode); } private XmlNode SetNewLocation(String location, String casesQuantity, String singlesQuantity) { XmlDocument docCountXml = new XmlDocument(); docCountXml.LoadXml(baseLocCountXML); SetValue(docCountXml, "LocationCount/Name", location); var xmlNodeList = docCountXml.SelectNodes("LocationCount/SCounts/SCount/Quantity"); xmlNodeList[0].FirstChild.Value = casesQuantity; xmlNodeList[1].FirstChild.Value = singlesQuantity; return docCountXml.SelectSingleNode("/"); } private static void SetValue(XmlDocument xmlDocument, String key, String value) { var xmlNode = xmlDocument.SelectSingleNode(key); xmlNode.FirstChild.Value = value; } } ```