Code:
                         / FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / Internal / NodeFunctions.cs / 1 / 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.
                        
                        
                        
                        
                    Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- __ComObject.cs
- PageRanges.cs
- AncestorChangedEventArgs.cs
- XmlILOptimizerVisitor.cs
- RewritingProcessor.cs
- TypeConverterAttribute.cs
- XPathDocumentBuilder.cs
- RowsCopiedEventArgs.cs
- SymDocumentType.cs
- FieldTemplateFactory.cs
- InstallerTypeAttribute.cs
- TransformerInfoCollection.cs
- PrimitiveXmlSerializers.cs
- VariableDesigner.xaml.cs
- PersonalizationProviderCollection.cs
- CompositeDispatchFormatter.cs
- ToolStripContentPanelRenderEventArgs.cs
- MobileListItem.cs
- Animatable.cs
- DataSourceView.cs
- GrammarBuilderRuleRef.cs
- WindowsContainer.cs
- CellRelation.cs
- SystemDiagnosticsSection.cs
- SqlRemoveConstantOrderBy.cs
- TypeConverterMarkupExtension.cs
- InlineCollection.cs
- DataGridParentRows.cs
- SafeCancelMibChangeNotify.cs
- Object.cs
- AliasedSlot.cs
- RSACryptoServiceProvider.cs
- ClientData.cs
- LinearQuaternionKeyFrame.cs
- HandlerWithFactory.cs
- HostingEnvironment.cs
- DataServiceResponse.cs
- DataGridParentRows.cs
- Themes.cs
- WebPartConnectionsCancelEventArgs.cs
- CollectionDataContractAttribute.cs
- ListSourceHelper.cs
- Hash.cs
- ClientSettingsProvider.cs
- WebPartCatalogCloseVerb.cs
- Parameter.cs
- RoleGroup.cs
- PrinterUnitConvert.cs
- CodeTypeMemberCollection.cs
- RtfToXamlLexer.cs
- DependencyPropertyValueSerializer.cs
- WorkflowTerminatedException.cs
- MetadataProperty.cs
- COM2Enum.cs
- SqlBooleanMismatchVisitor.cs
- RoleManagerModule.cs
- Perspective.cs
- DefaultShape.cs
- ListenerSessionConnection.cs
- _FixedSizeReader.cs
- TransferMode.cs
- ObjectStateEntryDbDataRecord.cs
- MonthCalendar.cs
- ConstructorNeedsTagAttribute.cs
- ClientBuildManagerCallback.cs
- CultureTable.cs
- IntegerFacetDescriptionElement.cs
- MetadataPropertyvalue.cs
- SynchronizationFilter.cs
- SqlBooleanMismatchVisitor.cs
- CommandBindingCollection.cs
- HttpRawResponse.cs
- Propagator.JoinPropagator.cs
- StrokeCollection2.cs
- TreeIterators.cs
- LogExtentCollection.cs
- XhtmlConformanceSection.cs
- SectionInput.cs
- AssociationSetEnd.cs
- TransformDescriptor.cs
- Point3DCollectionConverter.cs
- SettingsContext.cs
- CLRBindingWorker.cs
- TreeNodeMouseHoverEvent.cs
- SystemGatewayIPAddressInformation.cs
- xmlglyphRunInfo.cs
- DefaultProxySection.cs
- DocumentReferenceCollection.cs
- ProcessThread.cs
- Clipboard.cs
- TextParagraphProperties.cs
- EntitySetBase.cs
- UITypeEditor.cs
- SqlVisitor.cs
- RegexCharClass.cs
- ProgressBarRenderer.cs
- ClientTarget.cs
- SystemSounds.cs
- ColorTranslator.cs
- XmlSortKey.cs