Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / XPath / Internal / XPathAncestorQuery.cs / 1 / XPathAncestorQuery.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.Collections.Generic;
internal sealed class XPathAncestorQuery : CacheAxisQuery {
private bool matchSelf;
public XPathAncestorQuery(Query qyInput, string name, string prefix, XPathNodeType typeTest, bool matchSelf) : base(qyInput, name, prefix, typeTest) {
this.matchSelf = matchSelf;
}
private XPathAncestorQuery(XPathAncestorQuery other) : base(other) {
this.matchSelf = other.matchSelf;
}
public override object Evaluate(XPathNodeIterator context) {
base.Evaluate(context);
XPathNavigator ancestor = null;
XPathNavigator input;
while ((input = qyInput.Advance()) != null) {
if (matchSelf) {
if (matches(input)) {
if (!Insert(outputBuffer, input)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
continue;
}
}
}
if (ancestor == null || ! ancestor.MoveTo(input)) {
ancestor = input.Clone();
}
while (ancestor.MoveToParent()) {
if (matches(ancestor)) {
if (!Insert(outputBuffer, ancestor)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
break;
}
}
}
}
return this;
}
public override XPathNodeIterator Clone() { return new XPathAncestorQuery(this); }
public override int CurrentPosition { get { return outputBuffer.Count - count + 1; } }
public override QueryProps Properties { get { return base.Properties | QueryProps.Reverse; } }
public override void PrintQuery(XmlWriter w) {
w.WriteStartElement(this.GetType().Name);
if (matchSelf) {
w.WriteAttributeString("self", "yes");
}
if (NameTest) {
w.WriteAttributeString("name", Prefix.Length != 0 ? Prefix + ':' + Name : Name);
}
if (TypeTest != XPathNodeType.Element) {
w.WriteAttributeString("nodeType", TypeTest.ToString());
}
qyInput.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.Collections.Generic;
internal sealed class XPathAncestorQuery : CacheAxisQuery {
private bool matchSelf;
public XPathAncestorQuery(Query qyInput, string name, string prefix, XPathNodeType typeTest, bool matchSelf) : base(qyInput, name, prefix, typeTest) {
this.matchSelf = matchSelf;
}
private XPathAncestorQuery(XPathAncestorQuery other) : base(other) {
this.matchSelf = other.matchSelf;
}
public override object Evaluate(XPathNodeIterator context) {
base.Evaluate(context);
XPathNavigator ancestor = null;
XPathNavigator input;
while ((input = qyInput.Advance()) != null) {
if (matchSelf) {
if (matches(input)) {
if (!Insert(outputBuffer, input)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
continue;
}
}
}
if (ancestor == null || ! ancestor.MoveTo(input)) {
ancestor = input.Clone();
}
while (ancestor.MoveToParent()) {
if (matches(ancestor)) {
if (!Insert(outputBuffer, ancestor)) {
// If input is already in output buffer all its ancestors are in a buffer as well.
break;
}
}
}
}
return this;
}
public override XPathNodeIterator Clone() { return new XPathAncestorQuery(this); }
public override int CurrentPosition { get { return outputBuffer.Count - count + 1; } }
public override QueryProps Properties { get { return base.Properties | QueryProps.Reverse; } }
public override void PrintQuery(XmlWriter w) {
w.WriteStartElement(this.GetType().Name);
if (matchSelf) {
w.WriteAttributeString("self", "yes");
}
if (NameTest) {
w.WriteAttributeString("name", Prefix.Length != 0 ? Prefix + ':' + Name : Name);
}
if (TypeTest != XPathNodeType.Element) {
w.WriteAttributeString("nodeType", TypeTest.ToString());
}
qyInput.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
- SiteIdentityPermission.cs
- VariantWrapper.cs
- FindCriteria.cs
- ExtensionSimplifierMarkupObject.cs
- XmlUrlEditor.cs
- PeerApplication.cs
- FontStretchConverter.cs
- ITreeGenerator.cs
- BooleanProjectedSlot.cs
- XmlILStorageConverter.cs
- DropDownList.cs
- Activity.cs
- TreeNodeBindingDepthConverter.cs
- ObjectAnimationBase.cs
- MemberDescriptor.cs
- EntitySqlQueryCacheEntry.cs
- LookupNode.cs
- TreeNodeCollection.cs
- DocumentDesigner.cs
- HttpServerVarsCollection.cs
- RenderData.cs
- MenuStrip.cs
- RightNameExpirationInfoPair.cs
- SystemUnicastIPAddressInformation.cs
- BooleanToVisibilityConverter.cs
- WebPartTransformer.cs
- Activity.cs
- WSFederationHttpBindingElement.cs
- ChameleonKey.cs
- SchemaType.cs
- EventDescriptor.cs
- DocumentGridPage.cs
- DataGridViewAddColumnDialog.cs
- ConfigsHelper.cs
- EntityKeyElement.cs
- PropertyValueUIItem.cs
- GridItemPattern.cs
- UnionExpr.cs
- NativeStructs.cs
- ParallelTimeline.cs
- GridViewSelectEventArgs.cs
- ButtonBase.cs
- TraceHandlerErrorFormatter.cs
- ExternalCalls.cs
- XPathSelfQuery.cs
- SHA512Cng.cs
- ServiceSecurityAuditBehavior.cs
- ObjectDataSourceStatusEventArgs.cs
- SecondaryViewProvider.cs
- Double.cs
- RelationshipNavigation.cs
- DynamicValidatorEventArgs.cs
- XmlSchemaAttributeGroup.cs
- WebConfigurationHost.cs
- GridViewRowPresenterBase.cs
- DataGridViewCellStyle.cs
- DesignTimeType.cs
- TabControlToolboxItem.cs
- PageContent.cs
- DataGridViewAddColumnDialog.cs
- GroupQuery.cs
- SiteMapNode.cs
- ProtocolElementCollection.cs
- InternalEnumValidator.cs
- ServiceModelReg.cs
- LongValidator.cs
- BufferModeSettings.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- GifBitmapDecoder.cs
- LinearKeyFrames.cs
- SchemaMerger.cs
- TailPinnedEventArgs.cs
- ObjectTypeMapping.cs
- RelationshipDetailsCollection.cs
- Privilege.cs
- WeakReference.cs
- BaseTemplateCodeDomTreeGenerator.cs
- SqlGenericUtil.cs
- SourceFileBuildProvider.cs
- SqlRemoveConstantOrderBy.cs
- XmlNodeChangedEventArgs.cs
- RtfToken.cs
- DataGridViewIntLinkedList.cs
- PtsContext.cs
- QueryStringParameter.cs
- ThaiBuddhistCalendar.cs
- DesignerTextWriter.cs
- MailMessage.cs
- XpsDocumentEvent.cs
- PolyBezierSegmentFigureLogic.cs
- DispatcherEventArgs.cs
- BitmapEditor.cs
- ResourceAttributes.cs
- TemplateNameScope.cs
- StateFinalizationDesigner.cs
- VectorAnimation.cs
- KoreanLunisolarCalendar.cs
- StdValidatorsAndConverters.cs
- ToolStripArrowRenderEventArgs.cs
- StorageEntitySetMapping.cs