Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / CopyOfAction.cs / 1305376 / CopyOfAction.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;
using MS.Internal.Xml.XPath;
internal class CopyOfAction : CompiledAction {
private const int ResultStored = 2;
private const int NodeSetCopied = 3;
private int selectKey = Compiler.InvalidQueryKey;
internal override void Compile(Compiler compiler) {
CompileAttributes(compiler);
CheckRequiredAttribute(compiler, selectKey != Compiler.InvalidQueryKey, "select");
CheckEmpty(compiler);
}
internal override bool CompileAttribute(Compiler compiler) {
string name = compiler.Input.LocalName;
string value = compiler.Input.Value;
if (Ref.Equal(name, compiler.Atoms.Select)) {
this.selectKey = compiler.AddQuery(value);
}
else {
return false;
}
return true;
}
internal override void Execute(Processor processor, ActionFrame frame) {
Debug.Assert(processor != null && frame != null);
switch (frame.State) {
case Initialized:
Debug.Assert(frame.NodeSet != null);
Query query = processor.GetValueQuery(this.selectKey);
object result = query.Evaluate(frame.NodeSet);
if (result is XPathNodeIterator) {
// we cash this query because otherwise current() works incorrectly. Bug#382166.
// To be perfect we should use frame.NewNodeSet here
processor.PushActionFrame(CopyNodeSetAction.GetAction(), new XPathArrayIterator(query));
frame.State = NodeSetCopied;
break;
}
XPathNavigator nav = result as XPathNavigator;
if (nav != null) {
processor.PushActionFrame(CopyNodeSetAction.GetAction(), new XPathSingletonIterator(nav));
frame.State = NodeSetCopied;
break;
}
string value = XmlConvert.ToXPathString(result);
if (processor.TextEvent(value)) {
frame.Finished();
} else {
frame.StoredOutput = value;
frame.State = ResultStored;
}
break;
case ResultStored:
Debug.Assert(frame.StoredOutput != null);
processor.TextEvent(frame.StoredOutput);
frame.Finished();
break;
case NodeSetCopied:
Debug.Assert(frame.State == NodeSetCopied);
frame.Finished();
break;
}
}
}
}
// 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;
using MS.Internal.Xml.XPath;
internal class CopyOfAction : CompiledAction {
private const int ResultStored = 2;
private const int NodeSetCopied = 3;
private int selectKey = Compiler.InvalidQueryKey;
internal override void Compile(Compiler compiler) {
CompileAttributes(compiler);
CheckRequiredAttribute(compiler, selectKey != Compiler.InvalidQueryKey, "select");
CheckEmpty(compiler);
}
internal override bool CompileAttribute(Compiler compiler) {
string name = compiler.Input.LocalName;
string value = compiler.Input.Value;
if (Ref.Equal(name, compiler.Atoms.Select)) {
this.selectKey = compiler.AddQuery(value);
}
else {
return false;
}
return true;
}
internal override void Execute(Processor processor, ActionFrame frame) {
Debug.Assert(processor != null && frame != null);
switch (frame.State) {
case Initialized:
Debug.Assert(frame.NodeSet != null);
Query query = processor.GetValueQuery(this.selectKey);
object result = query.Evaluate(frame.NodeSet);
if (result is XPathNodeIterator) {
// we cash this query because otherwise current() works incorrectly. Bug#382166.
// To be perfect we should use frame.NewNodeSet here
processor.PushActionFrame(CopyNodeSetAction.GetAction(), new XPathArrayIterator(query));
frame.State = NodeSetCopied;
break;
}
XPathNavigator nav = result as XPathNavigator;
if (nav != null) {
processor.PushActionFrame(CopyNodeSetAction.GetAction(), new XPathSingletonIterator(nav));
frame.State = NodeSetCopied;
break;
}
string value = XmlConvert.ToXPathString(result);
if (processor.TextEvent(value)) {
frame.Finished();
} else {
frame.StoredOutput = value;
frame.State = ResultStored;
}
break;
case ResultStored:
Debug.Assert(frame.StoredOutput != null);
processor.TextEvent(frame.StoredOutput);
frame.Finished();
break;
case NodeSetCopied:
Debug.Assert(frame.State == NodeSetCopied);
frame.Finished();
break;
}
}
}
}
// 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
- ButtonBaseAdapter.cs
- ObjectDataSourceSelectingEventArgs.cs
- CheckBoxStandardAdapter.cs
- SamlSecurityTokenAuthenticator.cs
- StoragePropertyMapping.cs
- SignatureDescription.cs
- DataGridTable.cs
- MarkedHighlightComponent.cs
- GeometryGroup.cs
- DragDropHelper.cs
- TypedRowGenerator.cs
- IIS7WorkerRequest.cs
- XsdSchemaFileEditor.cs
- PropertySegmentSerializer.cs
- Attributes.cs
- XmlSchemaParticle.cs
- _HeaderInfo.cs
- Parameter.cs
- XamlBrushSerializer.cs
- StorageTypeMapping.cs
- RegexMatch.cs
- SoapExtensionTypeElementCollection.cs
- DoubleMinMaxAggregationOperator.cs
- BidPrivateBase.cs
- FormClosedEvent.cs
- CreatingCookieEventArgs.cs
- ExtendedProtectionPolicyElement.cs
- CngKeyBlobFormat.cs
- DateBoldEvent.cs
- MetafileHeader.cs
- TreeView.cs
- ReflectionPermission.cs
- _SslStream.cs
- AssertValidation.cs
- WeakEventTable.cs
- odbcmetadatacolumnnames.cs
- Path.cs
- ElementProxy.cs
- CacheEntry.cs
- TrackingMemoryStream.cs
- ThreadExceptionEvent.cs
- GenericTransactionFlowAttribute.cs
- XsdBuildProvider.cs
- GlyphRunDrawing.cs
- VirtualDirectoryMappingCollection.cs
- ContractAdapter.cs
- CodeGeneratorOptions.cs
- XmlReflectionImporter.cs
- MediaSystem.cs
- DelegateArgumentReference.cs
- DesignerAttribute.cs
- SettingsProviderCollection.cs
- FormViewPagerRow.cs
- QilName.cs
- FormsAuthenticationCredentials.cs
- cookiecontainer.cs
- ConfigurationElementProperty.cs
- CultureInfoConverter.cs
- XPathEmptyIterator.cs
- DataControlPagerLinkButton.cs
- BidirectionalDictionary.cs
- ParserStreamGeometryContext.cs
- Interlocked.cs
- ZipIOExtraFieldZip64Element.cs
- GZipStream.cs
- ManipulationStartingEventArgs.cs
- MasterPage.cs
- CompensationExtension.cs
- SqlConnectionStringBuilder.cs
- SpecularMaterial.cs
- __FastResourceComparer.cs
- ProfileModule.cs
- UIElementHelper.cs
- PolyLineSegment.cs
- WorkflowMessageEventArgs.cs
- FontWeights.cs
- Decimal.cs
- SlipBehavior.cs
- WebPartAddingEventArgs.cs
- OleAutBinder.cs
- FirstMatchCodeGroup.cs
- ObservableCollectionDefaultValueFactory.cs
- ColorTransformHelper.cs
- PeerNameRecord.cs
- ControlCachePolicy.cs
- HierarchicalDataTemplate.cs
- MergeFailedEvent.cs
- ArgumentException.cs
- AnimationException.cs
- JsonEnumDataContract.cs
- ControlPropertyNameConverter.cs
- ValidationVisibilityAttribute.cs
- ImpersonateTokenRef.cs
- PathFigure.cs
- URIFormatException.cs
- ParamArrayAttribute.cs
- compensatingcollection.cs
- RegexInterpreter.cs
- TimeSpanStorage.cs
- UpdatePanelControlTrigger.cs