public object AddElement(
            object parentElement,
            string childElementName,
            string childElementText             = "",
            bool childElementTextAsCDataSection = false)
        {
            XmlNode xmlNode = InMetaXmlUtils.TryGetXmlNode(parentElement);

            if (xmlNode != null)
            {
                return((object)new MsXmlNodeEmulator((XmlNode)XmlUtils.AppendElement(xmlNode, childElementName, childElementText)));
            }
            object ownerDocument = InMetaXmlUtils.InteropGetOwnerDocument(parentElement);
            object element       = InMetaXmlUtils.InteropCreateElement(ownerDocument, childElementName);

            InMetaXmlUtils.InteropAppendChild(parentElement, element);
            if (!string.IsNullOrEmpty(childElementText))
            {
                InMetaXmlUtils.InteropAppendChild(element, InMetaXmlUtils.InteropCreateTextNode(ownerDocument, childElementText));
            }
            return(element);
        }