/// <summary> /// Asynchronously reads the <see cref="SpecHierarchy"/> which is specific to the <see cref="Specification"/> class. /// </summary> /// <param name="reader"> /// an instance of <see cref="XmlReader"/> /// </param> /// <param name="token"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> protected override async Task ReadHierarchyAsync(XmlReader reader, CancellationToken token) { while (await reader.ReadAsync()) { if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } if (await reader.MoveToContentAsync() == XmlNodeType.Element && reader.LocalName == "SPEC-HIERARCHY") { if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } using (var subtree = reader.ReadSubtree()) { await subtree.MoveToContentAsync(); var specHierarchy = new SpecHierarchy(this, this.ReqIFContent, this.loggerFactory); await specHierarchy.ReadXmlAsync(subtree, token); } } } }
/// <summary> /// Reads the <see cref="SpecType"/> which is specific to the <see cref="Specification"/> class. /// </summary> /// <param name="reader"> /// an instance of <see cref="XmlReader"/> /// </param> /// <param name="token"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> private async Task DeserializeSpecHierarchyAsync(XmlReader reader, CancellationToken token) { while (await reader.ReadAsync()) { if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } if (await reader.MoveToContentAsync() == XmlNodeType.Element && reader.LocalName == "SPEC-HIERARCHY") { if (bool.TryParse(reader.GetAttribute("IS-TABLE-INTERNAL"), out var isTableInternal)) { this.IsTableInternal = isTableInternal; } if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } using (var subtree = reader.ReadSubtree()) { await subtree.MoveToContentAsync(); var specHierarchy = new SpecHierarchy(this, this.Root, this.ReqIfContent, this.loggerFactory); await specHierarchy.ReadXmlAsync(subtree, token); } } } }