/// <summary> /// Takes the Event Tree and Flattens it into a Queue as per the rules laid out in the RDF/XML Specification /// </summary> /// <param name="context">Parser Context</param> /// <param name="evt">Event which is the Root of the Tree (not necessarily a RootEvent)</param> /// <param name="nesting">A numeric value used for Parser Tracing to indicate nesting levels of the Event Tree</param> private void FlattenEventTree(RdfXmlParserContext context, IRdfXmlEvent evt, int nesting) { // Add to Queue context.Events.Enqueue(evt); if (context.TraceParsing) { Console.Write(nesting + " " + evt.GetType().ToString()); } // Iterate over Children where present if (evt is RootEvent) { RootEvent root = (RootEvent)evt; if (context.TraceParsing) { Console.WriteLine(""); } foreach (IRdfXmlEvent childEvent in root.Children) { FlattenEventTree(context, childEvent, nesting + 1); } // No End after a RootEvent return; } else if (evt is ElementEvent) { ElementEvent element = (ElementEvent)evt; if (context.TraceParsing) { Console.WriteLine(" " + element.Namespace + ":" + element.LocalName); } if (element.Children.Count > 0) { foreach (IRdfXmlEvent childEvent in element.Children) { FlattenEventTree(context, childEvent, nesting + 1); } } } else if (evt is TextEvent) { TextEvent text = (TextEvent)evt; if (context.TraceParsing) { Console.WriteLine(" " + text.Value); } // No additional End after a Text Event return; } else if (evt is TypedLiteralEvent) { TypedLiteralEvent tlit = (TypedLiteralEvent)evt; if (context.TraceParsing) { Console.WriteLine(); } // No additional End after a Text Event return; } // Add an End Element Event to the Queue EndElementEvent end = new EndElementEvent(); context.Events.Enqueue(end); if (context.TraceParsing) { String endDescrip = String.Empty; if (evt is ElementEvent) { ElementEvent temp = (ElementEvent)evt; endDescrip = " " + temp.QName; } Console.WriteLine(nesting + " " + end.GetType().ToString() + endDescrip); } }
/// <summary> /// Takes the Event Tree and Flattens it into a Queue as per the rules laid out in the RDF/XML Specification /// </summary> /// <param name="context">Parser Context</param> /// <param name="evt">Event which is the Root of the Tree (not necessarily a RootEvent)</param> /// <param name="nesting">A numeric value used for Parser Tracing to indicate nesting levels of the Event Tree</param> private void FlattenEventTree(RdfXmlParserContext context, IRdfXmlEvent evt, int nesting) { //Add to Queue context.Events.Enqueue(evt); if (context.TraceParsing) { Console.Write(nesting + " " + evt.GetType().ToString()); } //Iterate over Children where present if (evt is RootEvent) { RootEvent root = (RootEvent)evt; if (context.TraceParsing) { Console.WriteLine(""); } foreach (IRdfXmlEvent childEvent in root.Children) { this.FlattenEventTree(context, childEvent, nesting + 1); } //No End after a RootEvent return; } else if (evt is ElementEvent) { ElementEvent element = (ElementEvent)evt; if (context.TraceParsing) { Console.WriteLine(" " + element.Namespace + ":" + element.LocalName); } if (element.Children.Count > 0) { foreach (IRdfXmlEvent childEvent in element.Children) { this.FlattenEventTree(context, childEvent, nesting + 1); } } } else if (evt is TextEvent) { TextEvent text = (TextEvent)evt; if (context.TraceParsing) { Console.WriteLine(" " + text.Value); } //No additional End after a Text Event return; } else if (evt is TypedLiteralEvent) { TypedLiteralEvent tlit = (TypedLiteralEvent)evt; if (context.TraceParsing) { Console.WriteLine(); } //No additional End after a Text Event return; } //Add an End Element Event to the Queue EndElementEvent end = new EndElementEvent(); context.Events.Enqueue(end); if (context.TraceParsing) { String endDescrip = String.Empty; if (evt is ElementEvent) { ElementEvent temp = (ElementEvent)evt; endDescrip = " " + temp.QName; } Console.WriteLine(nesting + " " + end.GetType().ToString() + endDescrip); } }