示例#1
0
        /// <summary>
        /// Triggers the XML parsing of the data file and returns the read Isotopes.
        /// It turns of XML validation before parsing.
        /// </summary>
        /// <returns>a List of Isotope's. Returns an empty list is some reading error occurred.</returns>
        public IReadOnlyList <IIsotope> ReadIsotopes()
        {
            var reader  = new XReader();
            var handler = new IsotopeHandler();

            reader.Handler = handler;
            try
            {
                var settings = new XmlReaderSettings
                {
                    ValidationType  = ValidationType.None,
                    ValidationFlags = System.Xml.Schema.XmlSchemaValidationFlags.None
                };
                var xreader = XmlReader.Create(input, settings);
                var doc     = XDocument.Load(xreader);
                reader.Read(doc);
                return(handler.Isotopes);
            }
            catch (Exception exception)
            {
                Trace.TraceError($"{exception.GetType().Name}: {exception.Message}");
                Debug.WriteLine(exception);
            }
            return(Array.Empty <IIsotope>());
        }
示例#2
0
        // private functions

        /// <summary>
        /// Reads a ChemFile object from input.
        /// </summary>
        /// <returns>ChemFile with the content read from the input</returns>
        private IChemFile ReadChemFile(IChemObjectBuilder bldr)
        {
            IChemFile         cf      = null;
            XmlReaderSettings setting = new XmlReaderSettings
            {
                ValidationFlags = XmlSchemaValidationFlags.None
            };

            InChIHandler handler = new InChIHandler(bldr);

            try
            {
                var r = new XReader
                {
                    Handler = handler
                };
                XDocument doc = XDocument.Load(input);
                r.Read(doc);
                cf = handler.ChemFile;
            }
            catch (IOException e)
            {
                Trace.TraceError($"IOException: {e.Message}");
                Debug.WriteLine(e);
            }
            catch (XmlException saxe)
            {
                Trace.TraceError($"SAXException: {saxe.Message}");
                Debug.WriteLine(saxe);
            }
            return(cf);
        }
示例#3
0
        /// <summary>
        /// Reads the atom type mappings from the data file.
        /// </summary>
        /// <returns>a <see cref="IReadOnlyDictionary{TKey, TValue}"/> with atom type mappings. <see langword="null"/>, if some reading error occurred.</returns>
        public IReadOnlyDictionary <string, string> ReadAtomTypeMappings()
        {
            IReadOnlyDictionary <string, string> mappings = null;

            var setting = new XmlReaderSettings
            {
                DtdProcessing   = DtdProcessing.Parse,
                ValidationFlags = XmlSchemaValidationFlags.None
            };
            var handler = new OWLAtomTypeMappingHandler();
            var parser  = XmlReader.Create(input, setting);
            var reader  = new XReader
            {
                Handler = handler
            };

            try
            {
                var doc = XDocument.Load(parser);
                reader.Read(doc);
                mappings = handler.GetAtomTypeMappings();
            }
            catch (IOException exception)
            {
                Trace.TraceError(nameof(IOException) + ": " + exception.Message);
                Debug.WriteLine(exception);
            }
            catch (XmlException saxe)
            {
                Trace.TraceError(nameof(XmlException) + ": " + saxe.Message);
                Debug.WriteLine(saxe);
            }
            return(mappings ?? Dictionaries.Empty <string, string>());
        }
示例#4
0
        // private functions

        private IChemFile ReadChemFile(IChemFile file)
        {
            Debug.WriteLine("Started parsing from input...");

            var setting = new XmlReaderSettings
            {
                DtdProcessing   = DtdProcessing.Parse,
                ValidationFlags = XmlSchemaValidationFlags.None,
                XmlResolver     = new CMLResolver()
            };

            XmlReader parser;

            if (input == null)
            {
                Debug.WriteLine($"Parsing from URL: {url}");
                parser = XmlReader.Create(url, setting);
            }
            else
            {
                Debug.WriteLine("Parsing from Reader");
                parser = XmlReader.Create(input, setting);
            }

            CMLHandler handler = new CMLHandler(file);

            // copy the manually added conventions
            foreach (var conv in userConventions.Keys)
            {
                handler.RegisterConvention(conv, userConventions[conv]);
            }

            var reader = new XReader {
                Handler = handler
            };

            try
            {
                var doc = XDocument.Load(parser);
                reader.Read(doc);
            }
            catch (IOException e)
            {
                var error = "Error while reading file: " + e.Message;
                Trace.TraceError(error);
                Debug.WriteLine(e);
                throw new CDKException(error, e);
            }
            catch (XmlException saxe)
            {
                string error = "Error while parsing XML: " + saxe.Message;
                Trace.TraceError(error);
                Debug.WriteLine(saxe);
                throw new CDKException(error, saxe);
            }

            return(file);
        }
示例#5
0
        public static EntryDictionary Unmarshal(TextReader reader)
        {
            var handler = new DictionaryHandler();
            var r       = new XReader
            {
                Handler = handler
            };
            var doc = XDocument.Load(reader);

            r.Read(doc);
            return(handler.Dictionary);
        }