void OnUnknownNode(XmlNode node, object o, string qnames)
        {
            int line_number, line_position;

            if (Reader is XmlTextReader)
            {
                line_number   = ((XmlTextReader)Reader).LineNumber;
                line_position = ((XmlTextReader)Reader).LinePosition;
            }
            else
            {
                line_number   = 0;
                line_position = 0;
            }

            if (node is XmlAttribute)
            {
                UnknownAttribute(o, (XmlAttribute)node, qnames);
                return;
            }
            else if (node is XmlElement)
            {
                UnknownElement(o, (XmlElement)node, qnames);
                return;
            }
            else
            {
                if (eventSource != null)
                {
                    eventSource.OnUnknownNode(new XmlNodeEventArgs(line_number, line_position, node.LocalName, node.Name, node.NamespaceURI, node.NodeType, o, node.Value));
                }

                if (Reader.ReadState == ReadState.EndOfFile)
                {
                    throw new InvalidOperationException("End of document found");
                }
            }
        }