Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / CopyOfAction.cs / 1 / 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, Keywords.s_Select);
CheckEmpty(compiler);
}
internal override bool CompileAttribute(Compiler compiler) {
string name = compiler.Input.LocalName;
string value = compiler.Input.Value;
if (Keywords.Equals(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, Keywords.s_Select);
CheckEmpty(compiler);
}
internal override bool CompileAttribute(Compiler compiler) {
string name = compiler.Input.LocalName;
string value = compiler.Input.Value;
if (Keywords.Equals(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
- BaseAsyncResult.cs
- MouseEventArgs.cs
- EventLogPropertySelector.cs
- WebPartActionVerb.cs
- LineServicesCallbacks.cs
- LocatorBase.cs
- HttpInputStream.cs
- BookmarkUndoUnit.cs
- EntityStoreSchemaFilterEntry.cs
- CircleHotSpot.cs
- VirtualizedItemPattern.cs
- Asn1IntegerConverter.cs
- DocumentViewerBaseAutomationPeer.cs
- basecomparevalidator.cs
- GridSplitterAutomationPeer.cs
- RelatedImageListAttribute.cs
- AttachedPropertyMethodSelector.cs
- DefaultMemberAttribute.cs
- EntityTypeEmitter.cs
- BamlLocalizabilityResolver.cs
- PeerEndPoint.cs
- ObjectListTitleAttribute.cs
- CompilerLocalReference.cs
- ValueTypeIndexerReference.cs
- GridViewCommandEventArgs.cs
- AssemblyLoader.cs
- TemplateXamlTreeBuilder.cs
- CompositeControl.cs
- HyperLinkColumn.cs
- PeerReferralPolicy.cs
- TextWriter.cs
- InstanceKeyNotReadyException.cs
- CodeTypeOfExpression.cs
- ActivatableWorkflowsQueryResult.cs
- CounterCreationDataCollection.cs
- AlignmentXValidation.cs
- FlowDocumentPage.cs
- DataGridParentRows.cs
- ArrayWithOffset.cs
- OLEDB_Util.cs
- CodeNamespaceCollection.cs
- MatrixConverter.cs
- MaterialGroup.cs
- SecurityTokenProvider.cs
- FlowDocumentFormatter.cs
- SoapCodeExporter.cs
- XNodeNavigator.cs
- UnionCodeGroup.cs
- InternalConfigEventArgs.cs
- DataSet.cs
- MessageDesigner.cs
- wmiprovider.cs
- CommandBindingCollection.cs
- UserControl.cs
- PersonalizationAdministration.cs
- CodeBlockBuilder.cs
- DPTypeDescriptorContext.cs
- Comparer.cs
- Stack.cs
- ConstraintStruct.cs
- ColumnResult.cs
- GradientStop.cs
- SyncOperationState.cs
- Application.cs
- RowUpdatingEventArgs.cs
- RightsManagementInformation.cs
- AssociatedControlConverter.cs
- XmlStringTable.cs
- LocalizedNameDescriptionPair.cs
- FileDialogCustomPlaces.cs
- Converter.cs
- TextDecorationCollectionConverter.cs
- Encoder.cs
- ResourceReferenceKeyNotFoundException.cs
- ConfigXmlAttribute.cs
- ZeroOpNode.cs
- TypeConverterHelper.cs
- FileDialog_Vista_Interop.cs
- Rect3D.cs
- Avt.cs
- ExpressionBuilderContext.cs
- DateTimeOffsetConverter.cs
- SessionStateUtil.cs
- InternalCache.cs
- StdValidatorsAndConverters.cs
- EntityDataSourceReferenceGroup.cs
- XMLSyntaxException.cs
- DrawingCollection.cs
- CompensationParticipant.cs
- HtmlElementErrorEventArgs.cs
- Task.cs
- DataGridViewCellValueEventArgs.cs
- InternalBufferOverflowException.cs
- RowsCopiedEventArgs.cs
- SiteOfOriginContainer.cs
- DefinitionUpdate.cs
- MaskedTextProvider.cs
- Converter.cs
- RowUpdatingEventArgs.cs
- DataPagerFieldCollection.cs