Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / CopyNodeSetAction.cs / 1305376 / CopyNodeSetAction.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Xml.Xsl.XsltOld { using Res = System.Xml.Utils.Res; using System; using System.Diagnostics; using System.Xml; using System.Xml.XPath; internal sealed class CopyNodeSetAction : Action { private const int BeginEvent = 2; private const int Contents = 3; private const int Namespaces = 4; private const int Attributes = 5; private const int Subtree = 6; private const int EndEvent = 7; private static CopyNodeSetAction s_Action = new CopyNodeSetAction(); internal static CopyNodeSetAction GetAction() { Debug.Assert(s_Action != null); return s_Action; } internal override void Execute(Processor processor, ActionFrame frame) { Debug.Assert(processor != null && frame != null); while (processor.CanContinue) { switch (frame.State) { case Initialized: if (frame.NextNode(processor)) { frame.State = BeginEvent; goto case BeginEvent; } else { frame.Finished(); break; } case BeginEvent: Debug.Assert(frame.State == BeginEvent); if (SendBeginEvent(processor, frame.Node) == false) { // This one wasn't output break; } frame.State = Contents; continue; case Contents: Debug.Assert(frame.State == Contents); XPathNodeType nodeType = frame.Node.NodeType; if (nodeType == XPathNodeType.Element || nodeType == XPathNodeType.Root) { processor.PushActionFrame(CopyNamespacesAction.GetAction(), frame.NodeSet); frame.State = Namespaces; break; } if (SendTextEvent(processor, frame.Node) == false) { // This one wasn't output break; } frame.State = EndEvent; continue; case Namespaces: processor.PushActionFrame(CopyAttributesAction.GetAction(), frame.NodeSet); frame.State = Attributes; break; case Attributes: if (frame.Node.HasChildren) { processor.PushActionFrame(GetAction(), frame.Node.SelectChildren(XPathNodeType.All)); frame.State = Subtree; break; } frame.State = EndEvent; goto case EndEvent; case Subtree: //frame.Node.MoveToParent(); frame.State = EndEvent; continue; case EndEvent: Debug.Assert(frame.State == EndEvent); if (SendEndEvent(processor, frame.Node) == false) { // This one wasn't output break; } frame.State = Initialized; continue; } break; } } private static bool SendBeginEvent(Processor processor, XPathNavigator node) { return processor.CopyBeginEvent(node, node.IsEmptyElement); } private static bool SendTextEvent(Processor processor, XPathNavigator node) { return processor.CopyTextEvent(node); } private static bool SendEndEvent(Processor processor, XPathNavigator node) { return processor.CopyEndEvent(node); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Xml.Xsl.XsltOld { using Res = System.Xml.Utils.Res; using System; using System.Diagnostics; using System.Xml; using System.Xml.XPath; internal sealed class CopyNodeSetAction : Action { private const int BeginEvent = 2; private const int Contents = 3; private const int Namespaces = 4; private const int Attributes = 5; private const int Subtree = 6; private const int EndEvent = 7; private static CopyNodeSetAction s_Action = new CopyNodeSetAction(); internal static CopyNodeSetAction GetAction() { Debug.Assert(s_Action != null); return s_Action; } internal override void Execute(Processor processor, ActionFrame frame) { Debug.Assert(processor != null && frame != null); while (processor.CanContinue) { switch (frame.State) { case Initialized: if (frame.NextNode(processor)) { frame.State = BeginEvent; goto case BeginEvent; } else { frame.Finished(); break; } case BeginEvent: Debug.Assert(frame.State == BeginEvent); if (SendBeginEvent(processor, frame.Node) == false) { // This one wasn't output break; } frame.State = Contents; continue; case Contents: Debug.Assert(frame.State == Contents); XPathNodeType nodeType = frame.Node.NodeType; if (nodeType == XPathNodeType.Element || nodeType == XPathNodeType.Root) { processor.PushActionFrame(CopyNamespacesAction.GetAction(), frame.NodeSet); frame.State = Namespaces; break; } if (SendTextEvent(processor, frame.Node) == false) { // This one wasn't output break; } frame.State = EndEvent; continue; case Namespaces: processor.PushActionFrame(CopyAttributesAction.GetAction(), frame.NodeSet); frame.State = Attributes; break; case Attributes: if (frame.Node.HasChildren) { processor.PushActionFrame(GetAction(), frame.Node.SelectChildren(XPathNodeType.All)); frame.State = Subtree; break; } frame.State = EndEvent; goto case EndEvent; case Subtree: //frame.Node.MoveToParent(); frame.State = EndEvent; continue; case EndEvent: Debug.Assert(frame.State == EndEvent); if (SendEndEvent(processor, frame.Node) == false) { // This one wasn't output break; } frame.State = Initialized; continue; } break; } } private static bool SendBeginEvent(Processor processor, XPathNavigator node) { return processor.CopyBeginEvent(node, node.IsEmptyElement); } private static bool SendTextEvent(Processor processor, XPathNavigator node) { return processor.CopyTextEvent(node); } private static bool SendEndEvent(Processor processor, XPathNavigator node) { return processor.CopyEndEvent(node); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ConfigurationLocation.cs
- AttributeUsageAttribute.cs
- Int32Rect.cs
- HandlerMappingMemo.cs
- BCLDebug.cs
- KeySpline.cs
- sqlstateclientmanager.cs
- QualificationDataAttribute.cs
- GridViewPageEventArgs.cs
- AssertHelper.cs
- ToolStripOverflowButton.cs
- DesignTimeTemplateParser.cs
- DecimalConstantAttribute.cs
- RichTextBox.cs
- DefaultPropertyAttribute.cs
- UIElementPropertyUndoUnit.cs
- ToolStripRendererSwitcher.cs
- ControlPaint.cs
- ItemCollection.cs
- CharacterShapingProperties.cs
- ValueOfAction.cs
- Transform3DGroup.cs
- MeasureItemEvent.cs
- TdsEnums.cs
- DiscoveryDocumentLinksPattern.cs
- DocumentViewerBase.cs
- DiagnosticTraceSource.cs
- CounterCreationData.cs
- HierarchicalDataBoundControlAdapter.cs
- Rotation3D.cs
- PathGradientBrush.cs
- NameTable.cs
- AjaxFrameworkAssemblyAttribute.cs
- WorkflowServiceHost.cs
- ResumeStoryboard.cs
- AppDomainManager.cs
- DataTableNewRowEvent.cs
- RefreshEventArgs.cs
- OdbcConnectionStringbuilder.cs
- WebServiceClientProxyGenerator.cs
- ClientSettingsStore.cs
- ExtensibleClassFactory.cs
- XmlElementAttribute.cs
- TcpSocketManager.cs
- FamilyTypeface.cs
- PropertySet.cs
- TcpChannelHelper.cs
- DebugHandleTracker.cs
- SafeCryptContextHandle.cs
- DomainUpDown.cs
- XmlChildNodes.cs
- SolidColorBrush.cs
- Scheduler.cs
- FormatStringEditor.cs
- StickyNoteAnnotations.cs
- HttpWebRequestElement.cs
- SoapHttpTransportImporter.cs
- SystemInformation.cs
- SetStoryboardSpeedRatio.cs
- ItemMap.cs
- StaticExtensionConverter.cs
- HandlerBase.cs
- DataGridTablesFactory.cs
- SqlColumnizer.cs
- QueryStatement.cs
- TraceSwitch.cs
- XmlTextReaderImplHelpers.cs
- LabelAutomationPeer.cs
- WebProxyScriptElement.cs
- panel.cs
- OleStrCAMarshaler.cs
- SafeIUnknown.cs
- Base64Stream.cs
- ExtensionDataReader.cs
- FlowLayout.cs
- ElementHostAutomationPeer.cs
- ValidationRule.cs
- DrawingDrawingContext.cs
- RemoveStoryboard.cs
- SessionPageStateSection.cs
- FunctionQuery.cs
- ToolStripScrollButton.cs
- UITypeEditor.cs
- LZCodec.cs
- JsonQueryStringConverter.cs
- NavigateUrlConverter.cs
- ValueSerializer.cs
- ComponentManagerBroker.cs
- TextRunProperties.cs
- AffineTransform3D.cs
- TdsParserSessionPool.cs
- CommandPlan.cs
- PolyLineSegment.cs
- MessageProtectionOrder.cs
- AsyncPostBackErrorEventArgs.cs
- DataGridCommandEventArgs.cs
- BufferAllocator.cs
- DataGridViewElement.cs
- InstanceDataCollection.cs
- WindowsSlider.cs