Insert node in xml document using c#
11,233
When you do this:
XmlElement parentEle = doc.DocumentElement;
parentEle.AppendChild(xmlDocFrag);
You're appending the node to the root of the document. You probably wanted to select the actual readContract
node that the item is supposed to be appended into. As an example:
XmlNode newNode = doc.CreateNode(XmlNodeType.Element, "productGroup", "");
newNode.InnerText = "something";
XmlNode readContractNode = doc["Envelope"]["Body"]["readContract"];
XmlElement groups = readContractNode["productGroups"];
readContractNode.InsertAfter(newNode, groups);
Of course you'd probably want to handle the case where there are already multiple child productGroup
elements, but the idea is the same.
Author by
Madhan
Updated on June 04, 2022Comments
-
Madhan almost 2 years
I was trying to insert an XML node in XML document at a specific position.
This is my xml:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <readContract xmlns="http://implementation.company.schema.reference"> <ContactNumbers>10158</ContactNumbers> <productGroups>0085</productGroups> <indicationBalanceInfo>false</indicationBalanceInfo> <indicationBlocked>true</indicationBlocked> </readContract> </Body> </Envelope>
And am trying to insert another tag
<productGroups>0093</productGroups>
below to the tag<productGroups>0085</productGroups>
Expecting like the below:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <readContract xmlns="http://implementation.company.schema.reference"> <ContactNumbers>10158</ContactNumbers> <productGroups>0085</productGroups> <productGroups>0093</productGroups> <indicationBalanceInfo>false</indicationBalanceInfo> <indicationBlocked>true</indicationBlocked> </readContract> </Body> </Envelope>
Used the below C# code to achieve it.
XmlDocument doc = new XmlDocument(); string inputxml = this.StServiceCallActivity5.InputEnvelope.InnerXml.ToString(); //Here inputxml contains whole xml document. string addxml = "<productGroups>0093</productGroups>"; doc.LoadXml(inputxml); XmlDocumentFragment xmlDocFrag = doc.CreateDocumentFragment(); xmlDocFrag.InnerXml = addxml; XmlElement parentEle = doc.DocumentElement; parentEle.AppendChild(xmlDocFrag);
And it returns value like
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <readContract xmlns="http://implementation.company.schema.reference"> <ContactNumbers>10158</ContactNumbers> <productGroups>0085</productGroups> <productGroups>0093</productGroups> <indicationBalanceInfo>false</indicationBalanceInfo> <indicationBlocked>true</indicationBlocked> </readContract> </Body> <productGroups xmlns="">0093</productGroups> </Envelope>
Am a newbie to C# code, kindly help me to get the XML doc as expected. your help is much appreciated.