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);
        }
        public void SetNodeText(object element, string text, bool textAsCDataSection = false)
        {
            XmlNode xmlNode = InMetaXmlUtils.TryGetXmlNode(element);

            if (xmlNode != null)
            {
                XmlUtils.ReplaceOwnText(xmlNode, text);
            }
            else
            {
                object nodes  = InMetaXmlUtils.InteropSelectNodes(element, "text()");
                int    length = InMetaXmlUtils.InteropGetLength(nodes);
                for (int index = 0; index < length; ++index)
                {
                    InMetaXmlUtils.InteropRemoveChild(element, InMetaXmlUtils.InteropGetItem(nodes, index));
                }
                if (string.IsNullOrEmpty(text))
                {
                    return;
                }
                InMetaXmlUtils.InteropAppendChild(element, InMetaXmlUtils.InteropCreateTextNode(InMetaXmlUtils.InteropGetOwnerDocument(element), text));
            }
        }