private void LoadDocument()

in src/Model/DomLoader.cs [73:194]


        private void LoadDocument()
        {
            bool preserveWhitespace = false;
            XmlReader r = this._reader;
            XmlNode parent = this._doc;
            XmlElement element;
            while (r.Read())
            {
                XmlNode node = null;
                switch (r.NodeType)
                {
                    case XmlNodeType.Element:
                        bool fEmptyElement = r.IsEmptyElement;
                        element = _doc.CreateElement(r.Prefix, r.LocalName, r.NamespaceURI);

                        AddToTable(element);
                        element.IsEmpty = fEmptyElement;
                        ReadAttributes(r, element);

                        if (!fEmptyElement)
                        {
                            parent.AppendChild(element);
                            parent = element;
                            continue;
                        }
                        node = element;
                        break;

                    case XmlNodeType.EndElement:
                        if (parent.ParentNode == null)
                        {
                            // syntax error in document.
                            IXmlLineInfo li = (IXmlLineInfo)r;
                            throw new XmlException(string.Format(Strings.UnexpectedToken,
                                "</" + r.LocalName + ">", li.LineNumber, li.LinePosition), null, li.LineNumber, li.LinePosition);
                        }
                        parent = parent.ParentNode;
                        continue;

                    case XmlNodeType.EntityReference:
                        if (r.CanResolveEntity)
                        {
                            r.ResolveEntity();
                        }
                        continue;

                    case XmlNodeType.EndEntity:
                        continue;

                    case XmlNodeType.Attribute:
                        node = LoadAttributeNode();
                        break;

                    case XmlNodeType.Text:
                        node = _doc.CreateTextNode(r.Value);
                        AddToTable(node);
                        break;

                    case XmlNodeType.SignificantWhitespace:
                        node = _doc.CreateSignificantWhitespace(r.Value);
                        AddToTable(node);
                        break;

                    case XmlNodeType.Whitespace:
                        if (preserveWhitespace)
                        {
                            node = _doc.CreateWhitespace(r.Value);
                            AddToTable(node);
                            break;
                        }
                        else
                        {
                            continue;
                        }
                    case XmlNodeType.CDATA:
                        node = _doc.CreateCDataSection(r.Value);
                        AddToTable(node);
                        break;

                    case XmlNodeType.XmlDeclaration:
                        node = LoadDeclarationNode();
                        break;

                    case XmlNodeType.ProcessingInstruction:
                        node = _doc.CreateProcessingInstruction(r.Name, r.Value);
                        AddToTable(node);
                        if (string.IsNullOrEmpty(this.xsltFileName) && r.Name == "xml-stylesheet")
                        {
                            this.xsltFileName = ParseXsltArgs(((XmlProcessingInstruction)node).Data);
                        }
                        else if (string.IsNullOrEmpty(this.xsltDefaultOutput) && r.Name == "xsl-output")
                        {
                            this.xsltDefaultOutput = ParseXsltOutputArgs(((XmlProcessingInstruction)node).Data);
                        }
                        break;

                    case XmlNodeType.Comment:
                        node = _doc.CreateComment(r.Value);
                        AddToTable(node);
                        break;

                    case XmlNodeType.DocumentType:
                        {
                            string pubid = r.GetAttribute("PUBLIC");
                            string sysid = r.GetAttribute("SYSTEM");
                            node = _doc.CreateDocumentType(r.Name, pubid, sysid, r.Value);
                            break;
                        }

                    default:
                        UnexpectedNodeType(r.NodeType);
                        break;
                }

                Debug.Assert(node != null);
                Debug.Assert(parent != null);
                if (parent != null)
                {
                    parent.AppendChild(node);
                }
            }
        }