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
- DataPagerField.cs
- TabControl.cs
- CallbackWrapper.cs
- DataServiceResponse.cs
- DataSourceDescriptorCollection.cs
- ExtenderHelpers.cs
- TrustSection.cs
- BoundField.cs
- SingleConverter.cs
- AbstractExpressions.cs
- HebrewNumber.cs
- DataGridViewCellValidatingEventArgs.cs
- WeakRefEnumerator.cs
- HatchBrush.cs
- WebBrowserProgressChangedEventHandler.cs
- base64Transforms.cs
- TreeChangeInfo.cs
- DataColumnPropertyDescriptor.cs
- IssuerInformation.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- EpmSourceTree.cs
- ScrollEvent.cs
- FontTypeConverter.cs
- OrthographicCamera.cs
- OleDbPropertySetGuid.cs
- DoubleUtil.cs
- DurableMessageDispatchInspector.cs
- Baml2006KeyRecord.cs
- FunctionUpdateCommand.cs
- Conditional.cs
- AnnotationComponentManager.cs
- SqlDataSourceView.cs
- StatusBar.cs
- MemberCollection.cs
- IdnElement.cs
- Semaphore.cs
- CodeTypeDeclarationCollection.cs
- IsolatedStorageException.cs
- SqlBooleanMismatchVisitor.cs
- ScalarConstant.cs
- OleDbMetaDataFactory.cs
- WeakHashtable.cs
- PageTheme.cs
- LineGeometry.cs
- XsdBuildProvider.cs
- HtmlHead.cs
- WindowsListViewItemStartMenu.cs
- DurableInstanceProvider.cs
- FormClosedEvent.cs
- SingleKeyFrameCollection.cs
- WSIdentityFaultException.cs
- SecureStringHasher.cs
- BooleanConverter.cs
- OperandQuery.cs
- ProgressBarHighlightConverter.cs
- ProviderException.cs
- UnknownBitmapEncoder.cs
- ClaimTypeRequirement.cs
- GradientSpreadMethodValidation.cs
- ContractNamespaceAttribute.cs
- GenericTypeParameterBuilder.cs
- ServiceObjectContainer.cs
- XmlSchemaAnyAttribute.cs
- ScrollBarRenderer.cs
- WebRequestModulesSection.cs
- IndentedTextWriter.cs
- KeyMatchBuilder.cs
- PerformanceCounterPermission.cs
- QuaternionRotation3D.cs
- CategoryValueConverter.cs
- SqlReferenceCollection.cs
- ConfigurationStrings.cs
- SecurityContext.cs
- TextSelectionProcessor.cs
- HostedNamedPipeTransportManager.cs
- NavigationProgressEventArgs.cs
- RuntimeResourceSet.cs
- DataSvcMapFileSerializer.cs
- Processor.cs
- WebPartCatalogCloseVerb.cs
- QuaternionAnimation.cs
- FreezableCollection.cs
- SessionEndedEventArgs.cs
- TableLayoutPanel.cs
- InstanceKeyView.cs
- HandlerFactoryCache.cs
- _ServiceNameStore.cs
- WebPartZoneCollection.cs
- SystemResources.cs
- EntityViewGenerator.cs
- WebPartConnectionsCancelEventArgs.cs
- IDataContractSurrogate.cs
- PageStatePersister.cs
- SchemeSettingElementCollection.cs
- HttpSocketManager.cs
- SegmentTree.cs
- MobileUserControlDesigner.cs
- MexBindingElement.cs
- ReadOnlyDictionary.cs
- CacheRequest.cs