Solved

cannot append to the XML node.

Posted on 2004-08-27
1
2,228 Views
Last Modified: 2008-01-09
Hi folks:

I am having the following error out of the third line.

System.InvalidOperationException: The current node cannot contain other nodes.

XmlNode appt = CreateParameter("XML_DATA","",false,"");
appt.AppendChild(CreateNode("APPOINT_REQUEST"));
appt.FirstChild.AppendChild(CreateNode("FAMILYNO",familyNo,false));

Can't I just append to the first child of the node that I already appended. Any ideas????

Following are the definition of other functions used:


protected XmlElement CreateNode(string elementName)
{
  XmlElement node = doc.CreateElement(elementName);
  return node;
}

protected XmlElement CreateNode(string elementName,string elementValue,bool isCDATA)
{
 XmlElement node = doc.CreateElement(elementName);
                  
 // create a CDATA elemetn in here
 if (isCDATA )
 {
  XmlCDataSection cDATA = doc.CreateCDataSection(elementValue);
  node.AppendChild(cDATA);
 }
 else
  node.InnerText = elementValue;
 return node;
}


protected XmlElement CreateParameter(string name,string data,bool isCDATA,string type)
{
 XmlElement node = doc.CreateElement("PARAM");
            
 XmlAttribute attribute      = doc.CreateAttribute("NAME");
 attribute.InnerText            = name;
 node.Attributes.Append(attribute);

 attribute  = doc.CreateAttribute("TYPE");
 attribute.InnerText = type;
 node.Attributes.Append(attribute);
 
 if (isCDATA)
 {
   XmlCDataSection cDATA = doc.CreateCDataSection(data);
  node.AppendChild(cDATA);      
 }
 else
 {
  node.InnerText = data;      
 }
      
 return node;
}


0
Comment
Question by:rxraza
1 Comment
 
LVL 19

Accepted Solution

by:
drichards earned 125 total points
ID: 11916310
You have a subtle problem here.  In your CreateParameter method, you set "node.InnerText".  This creates a text node under the element node.  Then when you do "appt.FirstChild" you are referencing the text node (which cannot have children) and NOT the "APPOINT_REQUEST" element as you think.  You have several options.

1) Don't add the text node to the appt node - this is still fragile
2) Save the "APPT_REQUEST" node:

        XmlNode appt = CreateParameter("XML_DATA","",false,"");
        appt.AppendChild(CreateNode("APPOINT_REQUEST"));
        XmlNode node = CreateNode("APPOINT_REQUEST");
        appt.AppendChild(node);
        node.AppendChild(CreateNode("FAMILYNO",familyNo,false));

3) Explicitly select the node you want to append to:

        XmlNode appt = CreateParameter("XML_DATA","",false,"");
        appt.AppendChild(CreateNode("APPOINT_REQUEST"));
        XmlNode node = appt.SelectSingleNode("/APPOINT_REQUEST");
        node.AppendChild(CreateNode("FAMILYNO","My family",false));
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Flash (http://en.wikipedia.org/wiki/Adobe_Flash) has evolved over the years to where it has become a masterful tool for displaying content screen.  It has excellent layout placement, UI precision as well as rendering capabilities. This, along with t…
Summary Displaying images in RichTextBox is a common requirement with limited solutions available. Pasting through clipboard or embedding into RTF content only support static images.  This article describes how to insert Windows control objects int…
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question