private void AddXmlParam(StringBuilder msg, ParameterDesc param)
 {
     msg.Append("<");
     msg.Append(param.key);
     msg.Append(">");
     msg.Append(param.value);
     msg.Append("</");
     msg.Append(param.key);
     msg.Append(">");
 }
        private void AddParameters(IEnumerator <ParameterDesc> paramEnum, StringBuilder msg)
        {
            while (paramEnum.MoveNext())
            {
                ParameterDesc param = paramEnum.Current;
                if (param.isContainer)
                {
                    // Containing parameter need to add a bracket around contained parameters
                    msg.Append("<");
                    msg.Append(param.key);
                    msg.Append(">");

                    // Enable empty lists by checking for end of container before
                    // processing children
                    if (!param.isEmpty)
                    {
                        // Now add the contained list
                        AddParameters(paramEnum, msg);
                    }

                    msg.Append("</");
                    msg.Append(param.key);
                    msg.Append(">");
                }
                else
                {
                    // Simple parameter are just added
                    AddXmlParam(msg, param);
                }
                // If this is the last child of a container, break out of the loop
                // in order to close the container
                if (param.isLastChild)
                {
                    break;
                }
            }
        }