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
- CollaborationHelperFunctions.cs
- DataGridRelationshipRow.cs
- ChoiceConverter.cs
- FolderBrowserDialog.cs
- DbDataReader.cs
- WebBrowserNavigatingEventHandler.cs
- XmlCountingReader.cs
- WindowExtensionMethods.cs
- IndicCharClassifier.cs
- TrackBar.cs
- InternalBase.cs
- BehaviorService.cs
- Number.cs
- SingleTagSectionHandler.cs
- OdbcCommand.cs
- CodeDirectionExpression.cs
- ProfileManager.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- TrackingDataItem.cs
- AbstractExpressions.cs
- BookmarkCallbackWrapper.cs
- TargetControlTypeAttribute.cs
- ListControlConvertEventArgs.cs
- SecurityTokenRequirement.cs
- OdbcFactory.cs
- QilBinary.cs
- ExceptQueryOperator.cs
- XmlSchemaRedefine.cs
- HttpListenerRequestUriBuilder.cs
- DetailsViewUpdatedEventArgs.cs
- DataBinding.cs
- XmlCountingReader.cs
- RequestCacheEntry.cs
- _LocalDataStore.cs
- PieceNameHelper.cs
- TimeoutException.cs
- CounterSampleCalculator.cs
- SqlBulkCopyColumnMapping.cs
- FactoryGenerator.cs
- WebPartRestoreVerb.cs
- WindowsImpersonationContext.cs
- TreeNodeCollection.cs
- ZipFileInfoCollection.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- QilXmlReader.cs
- TemplateColumn.cs
- ImmutableCollection.cs
- MetabaseSettings.cs
- EditingMode.cs
- PropertyCondition.cs
- Exceptions.cs
- BinHexEncoder.cs
- LedgerEntry.cs
- FileDetails.cs
- unitconverter.cs
- StringConcat.cs
- TreeNodeEventArgs.cs
- EntityDataSourceUtil.cs
- IndicCharClassifier.cs
- SearchForVirtualItemEventArgs.cs
- JournalEntryStack.cs
- ViewValidator.cs
- SimpleWebHandlerParser.cs
- PrintSystemException.cs
- WinInetCache.cs
- PathSegmentCollection.cs
- DoubleLink.cs
- oledbconnectionstring.cs
- CompositionTarget.cs
- SqlBulkCopyColumnMappingCollection.cs
- AssemblyCache.cs
- WebPartMinimizeVerb.cs
- Component.cs
- Range.cs
- DebugView.cs
- GroupQuery.cs
- SessionStateItemCollection.cs
- WmlPanelAdapter.cs
- Int32Animation.cs
- NameValueConfigurationElement.cs
- SchemaImporter.cs
- AttachedPropertiesService.cs
- WebBrowserSiteBase.cs
- TranslateTransform3D.cs
- OleDbEnumerator.cs
- XmlQueryOutput.cs
- PropertyGrid.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- Latin1Encoding.cs
- Vector3D.cs
- SafeTimerHandle.cs
- AnnotationObservableCollection.cs
- ActivationServices.cs
- HttpPostedFile.cs
- EmptyEnumerator.cs
- Aes.cs
- SoapAttributes.cs
- QueryCoreOp.cs
- SolidColorBrush.cs
- TdsParser.cs