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
- ReadOnlyDataSource.cs
- cookiecontainer.cs
- WindowVisualStateTracker.cs
- MulticastDelegate.cs
- LocalizableAttribute.cs
- CustomMenuItemCollection.cs
- ExpressionStringBuilder.cs
- TextProperties.cs
- Filter.cs
- RequestCachingSection.cs
- ApplicationGesture.cs
- PeerCustomResolverElement.cs
- RegexTree.cs
- HwndSourceKeyboardInputSite.cs
- IsolationInterop.cs
- SmtpNetworkElement.cs
- SrgsDocumentParser.cs
- CommonDialog.cs
- PathFigureCollectionValueSerializer.cs
- Cell.cs
- PrintingPermission.cs
- SignatureDescription.cs
- ControlUtil.cs
- BooleanFacetDescriptionElement.cs
- ToolStripGrip.cs
- StrictModeSecurityHeaderElementInferenceEngine.cs
- DiscreteKeyFrames.cs
- WebPartTracker.cs
- BindingUtils.cs
- TextEditorCharacters.cs
- XsltCompileContext.cs
- ControlValuePropertyAttribute.cs
- Tile.cs
- CompressedStack.cs
- ToolStripOverflowButton.cs
- HighlightVisual.cs
- CacheAxisQuery.cs
- FilteredDataSetHelper.cs
- ElementHostAutomationPeer.cs
- HtmlControlPersistable.cs
- Visual.cs
- WmlLabelAdapter.cs
- ColorConverter.cs
- MetabaseServerConfig.cs
- CryptoApi.cs
- SwitchExpression.cs
- StickyNoteAnnotations.cs
- AvtEvent.cs
- DbParameterHelper.cs
- TargetConverter.cs
- PropertyFilterAttribute.cs
- TextMessageEncodingElement.cs
- wgx_sdk_version.cs
- WindowsFont.cs
- ObjectDataSourceMethodEventArgs.cs
- InputBuffer.cs
- PrivateFontCollection.cs
- Vector3DKeyFrameCollection.cs
- SRGSCompiler.cs
- documentsequencetextview.cs
- SqlReorderer.cs
- PageThemeCodeDomTreeGenerator.cs
- DataGridViewEditingControlShowingEventArgs.cs
- ClientUrlResolverWrapper.cs
- Rect3D.cs
- MenuBindingsEditorForm.cs
- XamlParser.cs
- CodeBinaryOperatorExpression.cs
- ParserStack.cs
- AsynchronousChannelMergeEnumerator.cs
- GeneralTransformCollection.cs
- WeakEventManager.cs
- HtmlTableRowCollection.cs
- BitmapEffectGeneralTransform.cs
- SignatureTargetIdManager.cs
- UnsafeNativeMethods.cs
- ItemChangedEventArgs.cs
- X509CertificateInitiatorClientCredential.cs
- CodeActivity.cs
- TextEffectCollection.cs
- Vector3DCollectionConverter.cs
- UTF7Encoding.cs
- SqlTypesSchemaImporter.cs
- LogicalExpressionEditor.cs
- SQLInt64.cs
- ServicePoint.cs
- FrameworkElementAutomationPeer.cs
- SchemaLookupTable.cs
- ToolboxItem.cs
- ItemContainerGenerator.cs
- SslStream.cs
- BevelBitmapEffect.cs
- InputProcessorProfilesLoader.cs
- UriWriter.cs
- EmptyReadOnlyDictionaryInternal.cs
- HttpCacheVaryByContentEncodings.cs
- SinglePageViewer.cs
- EntityKey.cs
- Thickness.cs
- ProjectionPlanCompiler.cs