/// <summary>
        /// Processes the input XML to output a simple XMLAttributes
        /// wrapped Dictionary, where the tag name is the key and it's
        /// contents are the value.
        ///
        /// For example this documentation would return a "summary" key
        /// with the value being this text you are reading now, as well
        /// as a "param" key and "returns" key.
        ///
        ///
        /// </summary>
        /// <param name="effectData">XML to parse</param>
        /// <returns>A KVP of nodes and their values</returns>
        private static XMLAttributes GetAttributes(XmlNode effectData)
        {
            var attributes = new XMLAttributes();

            foreach (XmlNode effectParameter in effectData)
            {
                if (effectParameter.SelectNodes("*").Count > 0)
                {
                    attributes.Add(effectParameter.Name, GetAttributes(effectParameter));
                }
                else
                {
                    attributes.Add(effectParameter.Name, effectParameter.InnerText);
                }
            }
            return(attributes);
        }
 /// <summary>
 /// Processes the input XML to output a simple XMLAttributes 
 /// wrapped Dictionary, where the tag name is the key and it's
 /// contents are the value.
 /// 
 /// For example this documentation would return a "summary" key
 /// with the value being this text you are reading now, as well
 /// as a "param" key and "returns" key.
 ///   
 /// 
 /// </summary>
 /// <param name="effectData">XML to parse</param>
 /// <returns>A KVP of nodes and their values</returns>
 private static XMLAttributes GetAttributes(XmlNode effectData)
 {
     var attributes = new XMLAttributes();
     foreach (XmlNode effectParameter in effectData)
     {
         if (effectParameter.SelectNodes("*").Count > 0)
         {
             attributes.Add(effectParameter.Name, GetAttributes(effectParameter));
         }
         else
         {
             attributes.Add(effectParameter.Name, effectParameter.InnerText);
         }
     }
     return attributes;
 }