/// <summary> /// Start construction of a new document. This must be called before any other methods are called. /// It may also be called after Close(), in order to build further documents. /// </summary> public void Initialize(XPathDocument doc, IXmlLineInfo lineInfo, string baseUri, XPathDocument.LoadFlags flags) { XPathNode[] page; int idx; _doc = doc; _nameTable = doc.NameTable; _atomizeNames = (flags & XPathDocument.LoadFlags.AtomizeNames) != 0; _idxParent = _idxSibling = 0; _elemNameIndex = new XPathNodeRef[ElementIndexSize]; // Prepare line number information _textBldr.Initialize(lineInfo); _lineInfo = lineInfo; _lineNumBase = 0; _linePosBase = 0; // Allocate the atomization table _infoTable = new XPathNodeInfoTable(); // Allocate singleton collapsed text node idx = NewNode(out page, XPathNodeType.Text, string.Empty, string.Empty, string.Empty, string.Empty); _doc.SetCollapsedTextNode(page, idx); // Allocate xmlns:xml namespace node _idxNmsp = NewNamespaceNode(out _pageNmsp, _nameTable.Add("xml"), _nameTable.Add(XmlConst.ReservedNsXml), null, 0); _doc.SetXmlNamespaceNode(_pageNmsp, _idxNmsp); if ((flags & XPathDocument.LoadFlags.Fragment) == 0) { // This tree has a document root node _idxParent = NewNode(out _pageParent, XPathNodeType.Root, string.Empty, string.Empty, string.Empty, baseUri); _doc.SetRootNode(_pageParent, _idxParent); } else { // This tree is an XQuery fragment (no document root node), so root will be next node in the current page _doc.SetRootNode(_nodePageFact.NextNodePage, _nodePageFact.NextNodeIndex); } }