private Unit HandleEndElement(XmlTextReader reader, IObserver <SaxEvent> observer, string[] path) { var content = _contentHolder.GetContent(); var startElement = _contentHolder.StartSaxEvent; _contentHolder = _contentHolder.Parent; var strUri = reader.NamespaceURI; var strName = reader.Name; var endElementEvent = new EndElementEvent(strUri, strName, false, startElement.Attributes, content, path); _contentHolder.Append(endElementEvent); observer.OnNext(endElementEvent); return(Unit.Default); }
private void HandleCloseTag(EndElementEvent end) { var elementName = end.Name; var content = end.Descendants; var startCandidate = _stack.Peek() as StartElementEvent; if (startCandidate != null) { if (!string.Equals(startCandidate.Name, elementName)) { _observer.OnError(new ApplicationException($"unexpected closing tag. expected: {startCandidate.Name} actual: {elementName}")); } else { _stack.Pop(); //TODO: check if end and start are interchangable here _observer.OnNext(ProjectStructureItem.Build(startCandidate, content)); return; } } _observer.OnError(new ApplicationException($"unexpected end element: {elementName}")); }
private void HandleCloseTag(EndElementEvent end) { var elementName = end.Name; var start = _stack.Peek() as StartElementEvent; if (start != null) { if (!string.Equals(start.Name, elementName)) { _observer.OnError(new ApplicationException($"unexpected closing tag. expected: {start.Name} actual: {elementName}")); } else { _stack.Pop(); //TODO: check if end and start are interchangable here _modelBuilder.ComposeElement(start, end.Descendants) .ForEachItem(_observer.OnNext); return; } } _observer.OnError(new ApplicationException($"unexpected end element: {elementName}")); }
private Unit HandleEmptyElement(XmlTextReader reader, IObserver <SaxEvent> observer, string[] path) { var attributes = new Dictionary <string, string>(); var strUri = reader.NamespaceURI; var strName = reader.Name; if (reader.HasAttributes) { for (var i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); attributes.Add(reader.Name, reader.Value); } } var readOnlyAttributes = new ReadOnlyDictionary <string, string>(attributes); var endElementEvent = new EndElementEvent(strUri, strName, true, readOnlyAttributes, new List <SaxEvent>(), path); _contentHolder.Append(endElementEvent); observer.OnNext(endElementEvent); return(Unit.Default); }
private void HandleClosedTag(EndElementEvent end) { _observer.OnNext(ProjectStructureItem.Build(end)); }
public IEnumerable <ProjectStructureItem> ComposeElement(EndElementEvent endElement) { return(ProjectStructureItem.Build(endElement)); }
private void HandleClosedTag(EndElementEvent end) { _modelBuilder.ComposeElement(end) .ForEachItem(_observer.OnNext); }
public static ProjectStructureItem Build(EndElementEvent saxEvent) { return(Build(saxEvent, null)); }
public static IEnumerable <ProjectStructureItem> Build(EndElementEvent saxEvent) { return(Build(saxEvent, null)); }