/// <summary>
		/// Checks whether an element using this group can contain a specified element.
		/// </summary>
		/// <param name="name">The name of the element to look for.</param>
		/// <param name="dtd">The DTD to use during the checking.</param>
		/// <returns>true if an element using this group can contain the element, otherwise false.</returns>
		/// <remarks>
		/// Rough approximation - this is really assuming an "Or" group
		/// </remarks>
		public bool CanContain(string name, SgmlDtd dtd)
		{
			if (dtd == null)
				throw new ArgumentNullException("dtd");

			// Do a simple search of members.
			foreach (object obj in Members)
			{
				if (obj is string)
				{
					if (string.Equals((string)obj, name, StringComparison.OrdinalIgnoreCase))
						return true;
				}
			}
			// didn't find it, so do a more expensive search over child elements
			// that have optional start tags and over child groups.
			foreach (object obj in Members)
			{
				string s = obj as string;
				if (s != null)
				{
					ElementDecl e = dtd.FindElement(s);
					if (e != null)
					{
						if (e.StartTagOptional)
						{
							// tricky case, the start tag is optional so element may be
							// allowed inside this guy!
							if (e.CanContain(name, dtd))
								return true;
						}
					}
				}
				else
				{
					Group m = (Group)obj;
					if (m.CanContain(name, dtd))
						return true;
				}
			}

			return false;
		}