コード例 #1
0
        public async Task <ProductRoot> ParseDocument(string file, VariantType variant)
        {
            var state = new ParseState(file, variant);

            using (var stream = File.OpenRead(file)) {
                var settings = new XmlReaderSettings {
                    Async = true
                };

                using (var reader = XmlReader.Create(stream, settings)) {
                    while (await reader.ReadAsync().ConfigureAwait(false))
                    {
                        switch (reader.NodeType)
                        {
                        case XmlNodeType.Element:
                            state.Inc(reader.Name, XmlNodeType.Element);
                            await _nodeParser.Read(state, reader).ConfigureAwait(false);

                            break;

                        case XmlNodeType.Text:
                            state.SetNodeType(XmlNodeType.Text);
                            await _nodeParser.Read(state, reader).ConfigureAwait(false);

                            break;

                        case XmlNodeType.EndElement:
                            state.SetNodeType(XmlNodeType.EndElement);
                            state.SetName(reader.Name);
                            await _nodeParser.Read(state, reader).ConfigureAwait(false);

                            state.Dec();
                            break;
                        }
                    }
                }
            }

            var productRoot = new HPEStateConverter().CreateProductRoot(file, state, variant);

            return(productRoot);
        }