private void ReadXmlContents(XmlReader reader)
        {
            string startElement = reader.Name;

            Debug.Assert(String.Equals(startElement, "contents"));

            if (reader.IsEmptyElement)
            {
                return;
            }

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (!reader.IsEmptyElement && String.Equals(reader.Name, "content",
                                                                StringComparison.OrdinalIgnoreCase))
                    {
                        switch (reader.GetAttribute("type").ToLower())
                        {
                        case "shared":
                            if (_sharedContent == null)
                            {
                                _sharedContent = new SharedContent();
                            }
                            if (reader.ReadToDescendant(SharedContent.TagName))
                            {
                                _sharedContent.ReadXml(reader);
                            }
                            break;

                        case "include":
                            if (_includeContent == null)
                            {
                                _includeContent = new IncludeContent();
                            }
                            if (reader.ReadToDescendant(IncludeContent.TagName))
                            {
                                _includeContent.ReadXml(reader);
                            }
                            break;
                        }
                    }
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    if (String.Equals(reader.Name, startElement, StringComparison.OrdinalIgnoreCase))
                    {
                        break;
                    }
                }
            }
        }