Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / NodeFunctions.cs / 1305376 / NodeFunctions.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace MS.Internal.Xml.XPath { using System; using System.Xml; using System.Xml.XPath; using System.Diagnostics; using System.Globalization; using System.Xml.Xsl; using FT = MS.Internal.Xml.XPath.Function.FunctionType; internal sealed class NodeFunctions : ValueQuery { Query arg = null; FT funcType; XsltContext xsltContext; public NodeFunctions(FT funcType, Query arg) { this.funcType = funcType; this.arg = arg; } public override void SetXsltContext(XsltContext context){ this.xsltContext = context.Whitespace ? context : null; if (arg != null) { arg.SetXsltContext(context); } } private XPathNavigator EvaluateArg(XPathNodeIterator context) { if (arg == null) { return context.Current; } arg.Evaluate(context); return arg.Advance(); } public override object Evaluate(XPathNodeIterator context) { XPathNavigator argVal; switch (funcType) { case FT.FuncPosition: return (double)context.CurrentPosition; case FT.FuncLast: return (double)context.Count; case FT.FuncNameSpaceUri: argVal = EvaluateArg(context); if (argVal != null) { return argVal.NamespaceURI; } break; case FT.FuncLocalName: argVal = EvaluateArg(context); if (argVal != null) { return argVal.LocalName; } break; case FT.FuncName : argVal = EvaluateArg(context); if (argVal != null) { return argVal.Name; } break; case FT.FuncCount: arg.Evaluate(context); int count = 0; if (xsltContext != null) { XPathNavigator nav; while ((nav = arg.Advance()) != null) { if (nav.NodeType != XPathNodeType.Whitespace || xsltContext.PreserveWhitespace(nav)) { count++; } } } else { while (arg.Advance() != null) { count++; } } return (double) count; } return string.Empty; } public override XPathResultType StaticType { get { return Function.ReturnTypes[(int)funcType]; } } public override XPathNodeIterator Clone() { NodeFunctions method = new NodeFunctions(funcType, Clone(arg)); method.xsltContext = this.xsltContext; return method; } public override void PrintQuery(XmlWriter w) { w.WriteStartElement(this.GetType().Name); w.WriteAttributeString("name", funcType.ToString()); if (arg != null) { arg.PrintQuery(w); } w.WriteEndElement(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace MS.Internal.Xml.XPath { using System; using System.Xml; using System.Xml.XPath; using System.Diagnostics; using System.Globalization; using System.Xml.Xsl; using FT = MS.Internal.Xml.XPath.Function.FunctionType; internal sealed class NodeFunctions : ValueQuery { Query arg = null; FT funcType; XsltContext xsltContext; public NodeFunctions(FT funcType, Query arg) { this.funcType = funcType; this.arg = arg; } public override void SetXsltContext(XsltContext context){ this.xsltContext = context.Whitespace ? context : null; if (arg != null) { arg.SetXsltContext(context); } } private XPathNavigator EvaluateArg(XPathNodeIterator context) { if (arg == null) { return context.Current; } arg.Evaluate(context); return arg.Advance(); } public override object Evaluate(XPathNodeIterator context) { XPathNavigator argVal; switch (funcType) { case FT.FuncPosition: return (double)context.CurrentPosition; case FT.FuncLast: return (double)context.Count; case FT.FuncNameSpaceUri: argVal = EvaluateArg(context); if (argVal != null) { return argVal.NamespaceURI; } break; case FT.FuncLocalName: argVal = EvaluateArg(context); if (argVal != null) { return argVal.LocalName; } break; case FT.FuncName : argVal = EvaluateArg(context); if (argVal != null) { return argVal.Name; } break; case FT.FuncCount: arg.Evaluate(context); int count = 0; if (xsltContext != null) { XPathNavigator nav; while ((nav = arg.Advance()) != null) { if (nav.NodeType != XPathNodeType.Whitespace || xsltContext.PreserveWhitespace(nav)) { count++; } } } else { while (arg.Advance() != null) { count++; } } return (double) count; } return string.Empty; } public override XPathResultType StaticType { get { return Function.ReturnTypes[(int)funcType]; } } public override XPathNodeIterator Clone() { NodeFunctions method = new NodeFunctions(funcType, Clone(arg)); method.xsltContext = this.xsltContext; return method; } public override void PrintQuery(XmlWriter w) { w.WriteStartElement(this.GetType().Name); w.WriteAttributeString("name", funcType.ToString()); if (arg != null) { arg.PrintQuery(w); } w.WriteEndElement(); } } } // 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
- FormClosingEvent.cs
- BulletChrome.cs
- MemberDomainMap.cs
- WindowShowOrOpenTracker.cs
- TextTreeInsertElementUndoUnit.cs
- MimeWriter.cs
- WebPartVerb.cs
- DataGridViewColumn.cs
- AdPostCacheSubstitution.cs
- base64Transforms.cs
- LayoutEditorPart.cs
- HMACSHA384.cs
- AxisAngleRotation3D.cs
- DocumentScope.cs
- WebPartDescription.cs
- BridgeDataRecord.cs
- PingReply.cs
- IsolatedStorageException.cs
- ConnectionsZone.cs
- Random.cs
- RoleService.cs
- WithParamAction.cs
- XmlArrayItemAttribute.cs
- ProfessionalColorTable.cs
- ListViewItemSelectionChangedEvent.cs
- ComponentCollection.cs
- AsnEncodedData.cs
- DESCryptoServiceProvider.cs
- BrowserTree.cs
- HandleRef.cs
- OleServicesContext.cs
- IProvider.cs
- IndentedTextWriter.cs
- EntityKey.cs
- TextSpanModifier.cs
- EncryptedPackageFilter.cs
- SqlCacheDependencySection.cs
- DataSourceControl.cs
- Int32CAMarshaler.cs
- FixedSOMImage.cs
- FileDialogPermission.cs
- FixedSOMLineRanges.cs
- TemplatedWizardStep.cs
- TransactionOptions.cs
- MetaForeignKeyColumn.cs
- InvalidPrinterException.cs
- HtmlInputButton.cs
- BinaryFormatterWriter.cs
- RuntimeConfigurationRecord.cs
- XmlSignificantWhitespace.cs
- ControlParameter.cs
- List.cs
- CodeAssignStatement.cs
- DropShadowEffect.cs
- LoadWorkflowAsyncResult.cs
- EdmPropertyAttribute.cs
- IdentityHolder.cs
- GridSplitterAutomationPeer.cs
- DataGridViewIntLinkedList.cs
- CheckBoxFlatAdapter.cs
- TemplatePartAttribute.cs
- HttpValueCollection.cs
- GifBitmapDecoder.cs
- DocumentEventArgs.cs
- DBDataPermissionAttribute.cs
- RequestNavigateEventArgs.cs
- SocketPermission.cs
- CircleHotSpot.cs
- DataObjectEventArgs.cs
- PersonalizationState.cs
- Matrix.cs
- ShapingEngine.cs
- AssemblyCache.cs
- PassportIdentity.cs
- InstanceDataCollection.cs
- ConnectionPoint.cs
- ScriptManager.cs
- HttpsChannelListener.cs
- SmiEventSink.cs
- CodeSubDirectory.cs
- Cast.cs
- KeyedCollection.cs
- XmlTypeMapping.cs
- XPathNodeInfoAtom.cs
- UserControl.cs
- LinearKeyFrames.cs
- AbstractSvcMapFileLoader.cs
- CompilerCollection.cs
- MetadataArtifactLoaderResource.cs
- BookmarkScopeManager.cs
- PeerApplication.cs
- DataControlPagerLinkButton.cs
- RC2CryptoServiceProvider.cs
- NavigationEventArgs.cs
- ConcurrentStack.cs
- ConfigurationSchemaErrors.cs
- XmlILAnnotation.cs
- SiteMap.cs
- CheckedListBox.cs
- GraphicsState.cs