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
- SchemaObjectWriter.cs
- HtmlMobileTextWriter.cs
- PowerEase.cs
- EncoderReplacementFallback.cs
- TextEditorCharacters.cs
- BuildProvider.cs
- HttpWebRequestElement.cs
- MenuItemBindingCollection.cs
- SecurityContextSecurityToken.cs
- MsmqChannelFactoryBase.cs
- ContextStack.cs
- WebPageTraceListener.cs
- PartBasedPackageProperties.cs
- Nullable.cs
- NamedObject.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- PathFigureCollectionConverter.cs
- validation.cs
- SqlBuffer.cs
- StylusPlugInCollection.cs
- PagedDataSource.cs
- ControlIdConverter.cs
- RTLAwareMessageBox.cs
- StyleHelper.cs
- XmlnsCompatibleWithAttribute.cs
- AutomationElementIdentifiers.cs
- FontSizeConverter.cs
- WebPartConnectionCollection.cs
- AnnotationResourceCollection.cs
- DateTimeParse.cs
- HtmlDocument.cs
- TextDecorationCollection.cs
- DataGridViewColumnStateChangedEventArgs.cs
- ApplicationBuildProvider.cs
- DeclaredTypeValidatorAttribute.cs
- COM2IDispatchConverter.cs
- WindowsFont.cs
- DataGridItemEventArgs.cs
- Inflater.cs
- MsmqAppDomainProtocolHandler.cs
- TraceHandlerErrorFormatter.cs
- MatrixKeyFrameCollection.cs
- LayoutEvent.cs
- EventMap.cs
- XsltConvert.cs
- ExpressionBindingCollection.cs
- thaishape.cs
- IgnorePropertiesAttribute.cs
- WindowInteropHelper.cs
- Ref.cs
- DrawItemEvent.cs
- StringComparer.cs
- PersistChildrenAttribute.cs
- CodeTypeReferenceSerializer.cs
- Helpers.cs
- IIS7UserPrincipal.cs
- XmlSchemaAny.cs
- DynamicResourceExtension.cs
- WebServiceFaultDesigner.cs
- ConfigurationStrings.cs
- GridViewDesigner.cs
- RegionIterator.cs
- DataException.cs
- PropertyGrid.cs
- DefaultDiscoveryService.cs
- SimpleType.cs
- WebPartCatalogAddVerb.cs
- StrongNamePublicKeyBlob.cs
- SmtpTransport.cs
- ValueQuery.cs
- DataExpression.cs
- XmlRawWriter.cs
- SerializationEventsCache.cs
- QueryContinueDragEventArgs.cs
- ActivityScheduledRecord.cs
- EventArgs.cs
- PropertyChangeTracker.cs
- CustomExpression.cs
- GPStream.cs
- ReachFixedDocumentSerializer.cs
- SchemaCollectionPreprocessor.cs
- RenderingBiasValidation.cs
- FrameworkElementFactory.cs
- TextReader.cs
- DataKey.cs
- BrowsableAttribute.cs
- RowVisual.cs
- DesignerTransaction.cs
- BindingsCollection.cs
- Hashtable.cs
- Clock.cs
- SecurityUtils.cs
- CodeArrayCreateExpression.cs
- FileCodeGroup.cs
- Simplifier.cs
- GlyphTypeface.cs
- DocobjHost.cs
- WebPartZoneCollection.cs
- ReadContentAsBinaryHelper.cs
- Sentence.cs