Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ObjectTag.cs
- PerformanceCounterCategory.cs
- RuntimeConfigurationRecord.cs
- Win32.cs
- SelectionGlyphBase.cs
- ResourceDisplayNameAttribute.cs
- ProbeMatchesCD1.cs
- DecoratedNameAttribute.cs
- Evaluator.cs
- LineBreak.cs
- Button.cs
- Helpers.cs
- ListViewTableRow.cs
- ConstrainedDataObject.cs
- Polygon.cs
- SiteMapDataSource.cs
- CompilerLocalReference.cs
- InstanceKeyView.cs
- Polyline.cs
- HashCodeCombiner.cs
- CodeCompiler.cs
- XmlDownloadManager.cs
- HandleExceptionArgs.cs
- SHA384Managed.cs
- ErrorLog.cs
- ILGen.cs
- Subtree.cs
- EnumValidator.cs
- ImageCodecInfo.cs
- _ListenerRequestStream.cs
- DispatcherHookEventArgs.cs
- ForeignKeyConstraint.cs
- SystemResourceKey.cs
- SoapElementAttribute.cs
- WCFBuildProvider.cs
- ToolStripRenderer.cs
- BoundsDrawingContextWalker.cs
- AssociationType.cs
- SecurityElement.cs
- UnmanagedMemoryStream.cs
- Preprocessor.cs
- MenuRenderer.cs
- DefaultTraceListener.cs
- SystemFonts.cs
- Decoder.cs
- ClientConfigurationHost.cs
- AppDomainProtocolHandler.cs
- IDictionary.cs
- PageCatalogPartDesigner.cs
- ColorTransformHelper.cs
- Group.cs
- WindowsScrollBar.cs
- COM2PictureConverter.cs
- PrinterSettings.cs
- ScriptRegistrationManager.cs
- XamlBrushSerializer.cs
- RadioButton.cs
- StreamInfo.cs
- Decimal.cs
- WebPartCatalogAddVerb.cs
- StretchValidation.cs
- PointLightBase.cs
- XhtmlTextWriter.cs
- MetadataPropertyAttribute.cs
- EncryptedHeader.cs
- SQLByte.cs
- CryptoHandle.cs
- DataViewManagerListItemTypeDescriptor.cs
- DynamicActivity.cs
- SqlClientPermission.cs
- _SafeNetHandles.cs
- EncryptedType.cs
- MediaElementAutomationPeer.cs
- ReachPageContentSerializer.cs
- BufferBuilder.cs
- SerializableAttribute.cs
- BaseCodeDomTreeGenerator.cs
- NamespaceQuery.cs
- TransformerTypeCollection.cs
- FormViewInsertEventArgs.cs
- manifestimages.cs
- GACIdentityPermission.cs
- AddInIpcChannel.cs
- RootContext.cs
- Variable.cs
- ProfileInfo.cs
- ResourceDescriptionAttribute.cs
- Zone.cs
- LayoutTable.cs
- RSAOAEPKeyExchangeFormatter.cs
- NamespaceInfo.cs
- WebAdminConfigurationHelper.cs
- AssemblyUtil.cs
- CommentEmitter.cs
- NumberFunctions.cs
- RubberbandSelector.cs
- Int64Animation.cs
- BamlRecordReader.cs
- ClockGroup.cs
- CombinedGeometry.cs