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
- XmlElementAttributes.cs
- Visual3D.cs
- ExecutorLocksHeldException.cs
- ScrollProviderWrapper.cs
- HtmlFormWrapper.cs
- CompositeFontParser.cs
- ExpressionReplacer.cs
- CompositeTypefaceMetrics.cs
- CompositeKey.cs
- FormsAuthenticationUserCollection.cs
- CompModSwitches.cs
- DataRowComparer.cs
- StyleXamlParser.cs
- CorrelationInitializer.cs
- XmlResolver.cs
- JoinGraph.cs
- basemetadatamappingvisitor.cs
- LayoutEvent.cs
- DataListItemCollection.cs
- XmlWhitespace.cs
- SQLDecimalStorage.cs
- AppDomainFactory.cs
- TreeViewCancelEvent.cs
- CriticalHandle.cs
- ConditionalBranch.cs
- RequestFactory.cs
- XmlSchemaExporter.cs
- DataKey.cs
- SignalGate.cs
- AssemblySettingAttributes.cs
- Padding.cs
- PtsPage.cs
- BuildDependencySet.cs
- Margins.cs
- PolyBezierSegmentFigureLogic.cs
- ViewPort3D.cs
- AssemblyInfo.cs
- ResourceDictionaryCollection.cs
- HtmlInputReset.cs
- ExecutionEngineException.cs
- Range.cs
- XmlSchemaGroupRef.cs
- ObjectDataSourceView.cs
- TypeConstant.cs
- DriveInfo.cs
- StackBuilderSink.cs
- LinqExpressionNormalizer.cs
- WebCategoryAttribute.cs
- AssemblyCache.cs
- RuleElement.cs
- FillErrorEventArgs.cs
- _FixedSizeReader.cs
- HtmlInputSubmit.cs
- WebPartCatalogAddVerb.cs
- XmlIncludeAttribute.cs
- EventMappingSettingsCollection.cs
- ConfigurationElementCollection.cs
- UriSectionData.cs
- Soap.cs
- EdmToObjectNamespaceMap.cs
- XPathExpr.cs
- Perspective.cs
- SpecialFolderEnumConverter.cs
- ResourceReader.cs
- AttributeExtensions.cs
- Matrix.cs
- ServerValidateEventArgs.cs
- RecordBuilder.cs
- ExpressionHelper.cs
- AvTraceFormat.cs
- Exception.cs
- InternalConfigEventArgs.cs
- Function.cs
- BoolLiteral.cs
- MsmqHostedTransportConfiguration.cs
- ProxyManager.cs
- PropertyMapper.cs
- CollectionType.cs
- indexingfiltermarshaler.cs
- DesignerCalendarAdapter.cs
- XmlAttribute.cs
- WmlCalendarAdapter.cs
- HitTestParameters.cs
- Binding.cs
- QuaternionKeyFrameCollection.cs
- ObjectQuery_EntitySqlExtensions.cs
- ToolboxDataAttribute.cs
- XmlEncodedRawTextWriter.cs
- Point3DValueSerializer.cs
- BinaryFormatterWriter.cs
- Helper.cs
- BmpBitmapDecoder.cs
- KernelTypeValidation.cs
- XhtmlBasicObjectListAdapter.cs
- DbSetClause.cs
- DropDownList.cs
- MultiDataTrigger.cs
- XmlSchemaSimpleContentRestriction.cs
- CalendarButtonAutomationPeer.cs
- SecurityHelper.cs