/// <summary>
        /// Sets the value of a property in this extensible element.
        /// </summary>
        /// <param name="ext"></param>
        /// <param name="name"></param>
        /// <param name="value"></param>
        public static void SetValue(this IExtensibleElement ext, string name, string value)
        {
            Check.NotNull(ext, "ext");    //NOXLATE
            Check.NotEmpty(name, "name"); //NOXLATE

            if (ext.Extension.Content != null)
            {
                var el = ext.Extension.Content.FindElementByName(name);
                if (el != null)
                {
                    el.InnerText = value;
                }
                else
                {
                    var values = new List <XmlElement>(ext.Extension.Content);
                    var rid    = AppDefDocument.Instance.CreateElement(name);
                    rid.InnerText = value;
                    values.Add(rid);
                    ext.Extension.Content = values.ToArray();
                }
            }
            else
            {
                var rid = AppDefDocument.Instance.CreateElement(name);
                rid.InnerText         = value;
                ext.Extension.Content = new XmlElement[] { rid };
            }

            Trace.TraceInformation("Extensible element property {0} set to: {1}", name, value); //NOXLATE
        }
        /// <summary>
        /// Gets all the properties in this extensible element
        /// </summary>
        /// <param name="ext"></param>
        /// <returns></returns>
        public static NameValueCollection GetAllValues(this IExtensibleElement ext)
        {
            Check.NotNull(ext, "ext"); //NOXLATE
            NameValueCollection values = new NameValueCollection();

            foreach (var el in ext.Extension.Content)
            {
                values.Add(el.Name, el.InnerText);
            }
            return(values);
        }
        /// <summary>
        /// Gets the names of all properties of this extensible element
        /// </summary>
        /// <param name="ext"></param>
        /// <returns></returns>
        public static string[] GetNames(this IExtensibleElement ext)
        {
            Check.NotNull(ext, "ext"); //NOXLATE

            List <string> names = new List <string>();

            foreach (var el in ext.Extension.Content)
            {
                names.Add(el.Name);
            }

            return(names.ToArray());
        }
        /// <summary>
        /// Gets the value of a property in this extensible element. If none exists, an empty string is returned
        /// </summary>
        /// <param name="ext"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static string GetValue(this IExtensibleElement ext, string name)
        {
            Check.NotNull(ext, "ext");    //NOXLATE
            Check.NotEmpty(name, "name"); //NOXLATE

            if (ext.Extension.Content != null)
            {
                var el = ext.Extension.Content.FindElementByName(name);
                if (el != null)
                {
                    return(el.InnerText);
                }
            }
            return(string.Empty);
        }
        /// <summary>
        /// Replace the values of all properties in this extensible element with the values provided
        /// </summary>
        /// <param name="ext"></param>
        /// <param name="values"></param>
        public static void SetAllValues(this IExtensibleElement ext, NameValueCollection values)
        {
            Check.NotNull(ext, "ext");       //NOXLATE
            Check.NotNull(values, "values"); //NOXLATE

            var elements = new List <XmlElement>();

            foreach (string name in values.Keys)
            {
                var value = values[name];
                var rid   = AppDefDocument.Instance.CreateElement(name);
                rid.InnerText = value;
                elements.Add(rid);
            }
            ext.Extension.Content = elements.ToArray();
        }