Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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.
//
// [....]
//-----------------------------------------------------------------------------
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
- CryptoKeySecurity.cs
- smtppermission.cs
- QueryRewriter.cs
- TraceSection.cs
- SerializationAttributes.cs
- TemplateParser.cs
- QuaternionAnimation.cs
- RepeaterDataBoundAdapter.cs
- TextEditorThreadLocalStore.cs
- StaticTextPointer.cs
- QueryOptionExpression.cs
- Vector3dCollection.cs
- XMLSchema.cs
- XmlDocument.cs
- Vector.cs
- XmlReflectionImporter.cs
- PermissionListSet.cs
- FixedPage.cs
- PostBackOptions.cs
- remotingproxy.cs
- XmlHierarchicalEnumerable.cs
- TypeBuilder.cs
- BaseCollection.cs
- MasterPageParser.cs
- StackSpiller.cs
- TextBoxAutomationPeer.cs
- DesignerContextDescriptor.cs
- CodeIdentifiers.cs
- FlatButtonAppearance.cs
- MarshalDirectiveException.cs
- SharedPerformanceCounter.cs
- RoutedEventHandlerInfo.cs
- ResourceProviderFactory.cs
- ScrollPattern.cs
- ListBase.cs
- prompt.cs
- DATA_BLOB.cs
- NamespaceMapping.cs
- StringAttributeCollection.cs
- EventLogPermissionAttribute.cs
- BulletChrome.cs
- TypeLoader.cs
- DBCommand.cs
- DataKey.cs
- Parameter.cs
- PrintPageEvent.cs
- CheckBox.cs
- NullableConverter.cs
- StreamGeometryContext.cs
- FolderBrowserDialogDesigner.cs
- EncoderReplacementFallback.cs
- HostingEnvironmentSection.cs
- ValidationHelper.cs
- ProfileBuildProvider.cs
- WebPartDisplayModeCancelEventArgs.cs
- AnnotationAuthorChangedEventArgs.cs
- SQLString.cs
- HeaderedItemsControl.cs
- IImplicitResourceProvider.cs
- DataPagerFieldCollection.cs
- OleDbSchemaGuid.cs
- BamlReader.cs
- GridItemCollection.cs
- SystemBrushes.cs
- UInt32.cs
- EntityChangedParams.cs
- XmlWhitespace.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- PasswordDeriveBytes.cs
- SqlFunctionAttribute.cs
- CheckableControlBaseAdapter.cs
- DesignerCategoryAttribute.cs
- DateTimeOffset.cs
- DataControlField.cs
- CommonXSendMessage.cs
- RijndaelManaged.cs
- Filter.cs
- WebPartDeleteVerb.cs
- ServiceOperationListItemList.cs
- TableChangeProcessor.cs
- Dynamic.cs
- SvcMapFile.cs
- CommandField.cs
- XmlResolver.cs
- SoapEnvelopeProcessingElement.cs
- EventManager.cs
- StreamReader.cs
- IPHostEntry.cs
- ClaimComparer.cs
- CSharpCodeProvider.cs
- ClassDataContract.cs
- TransactionsSectionGroup.cs
- ParameterCollection.cs
- Missing.cs
- CodeExporter.cs
- PermissionRequestEvidence.cs
- XmlFormatExtensionPointAttribute.cs
- HttpValueCollection.cs
- Pts.cs
- MouseEventArgs.cs