Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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
- JavaScriptString.cs
- NetworkInterface.cs
- PtsContext.cs
- DataGridCell.cs
- AbstractDataSvcMapFileLoader.cs
- AliasedExpr.cs
- DebugManager.cs
- ColorTransform.cs
- TextPointerBase.cs
- EventLevel.cs
- EnumMemberAttribute.cs
- SqlDataSourceCache.cs
- PropertyTabChangedEvent.cs
- GridEntry.cs
- ScriptControlManager.cs
- ToolStripDropDownButton.cs
- ToolBarTray.cs
- IConvertible.cs
- RecordManager.cs
- SeekableMessageNavigator.cs
- CrossContextChannel.cs
- DataBoundControlParameterTarget.cs
- validationstate.cs
- WebDisplayNameAttribute.cs
- MetadataException.cs
- UpdateException.cs
- Clock.cs
- ZipIOLocalFileBlock.cs
- StoreItemCollection.cs
- DbConnectionFactory.cs
- ModelPropertyCollectionImpl.cs
- XPathAncestorIterator.cs
- DashStyle.cs
- HtmlInputSubmit.cs
- PersonalizationProviderHelper.cs
- XmlCharCheckingWriter.cs
- FactoryGenerator.cs
- HostingPreferredMapPath.cs
- XmlSerializerNamespaces.cs
- StylusPointProperty.cs
- WebPartEditorApplyVerb.cs
- ListItemConverter.cs
- PatternMatcher.cs
- DependencyProperty.cs
- DrawingBrush.cs
- AutomationEventArgs.cs
- datacache.cs
- SQLInt32Storage.cs
- RelationshipFixer.cs
- WindowHideOrCloseTracker.cs
- DrawingCollection.cs
- XDeferredAxisSource.cs
- WmlLinkAdapter.cs
- GridViewRowCollection.cs
- Win32SafeHandles.cs
- FormViewModeEventArgs.cs
- SchemeSettingElement.cs
- ConfigurationManagerInternalFactory.cs
- NotifyParentPropertyAttribute.cs
- ImportFileRequest.cs
- WinFormsSpinner.cs
- XmlComment.cs
- ExpressionBindings.cs
- HitTestParameters3D.cs
- XmlSerializableReader.cs
- ToolStripPanelRow.cs
- HtmlHead.cs
- QilSortKey.cs
- TreeViewHitTestInfo.cs
- PositiveTimeSpanValidator.cs
- ToolStripArrowRenderEventArgs.cs
- AsymmetricKeyExchangeFormatter.cs
- SerialReceived.cs
- Filter.cs
- RectangleConverter.cs
- DataGridViewCellCollection.cs
- QueryMatcher.cs
- DataGridTable.cs
- ManipulationStartedEventArgs.cs
- FSWPathEditor.cs
- HttpResponse.cs
- Hashtable.cs
- BindingNavigator.cs
- DynamicMetaObjectBinder.cs
- BitmapFrameEncode.cs
- TypeInitializationException.cs
- DataControlCommands.cs
- ConfigXmlComment.cs
- DesignerHelpers.cs
- GifBitmapEncoder.cs
- Parser.cs
- DataKey.cs
- TextRunCache.cs
- StatusBarPanelClickEvent.cs
- SystemIcmpV6Statistics.cs
- XPathNodeHelper.cs
- SiteMapPath.cs
- UnionCqlBlock.cs
- SingleTagSectionHandler.cs
- WebPartActionVerb.cs