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
- ActionFrame.cs
- SettingsAttributeDictionary.cs
- SerializationStore.cs
- RSAPKCS1SignatureFormatter.cs
- MtomMessageEncoder.cs
- FormCollection.cs
- NullableFloatAverageAggregationOperator.cs
- TextContainerHelper.cs
- PersonalizationStateQuery.cs
- HttpModuleActionCollection.cs
- SelectionService.cs
- NamespaceImport.cs
- DragDropHelper.cs
- CryptoApi.cs
- SyndicationDeserializer.cs
- WindowsTooltip.cs
- WindowsSlider.cs
- CodeChecksumPragma.cs
- UIElement3D.cs
- RIPEMD160Managed.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- WinFormsSpinner.cs
- _NestedSingleAsyncResult.cs
- TripleDESCryptoServiceProvider.cs
- CustomErrorsSection.cs
- UriTemplateClientFormatter.cs
- UInt32.cs
- DataObjectEventArgs.cs
- ToolStripStatusLabel.cs
- SqlXml.cs
- ContentType.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- Decorator.cs
- MessageQueueKey.cs
- Visual.cs
- MediaCommands.cs
- DesignUtil.cs
- ColorContext.cs
- NetworkInformationPermission.cs
- WebPartDescription.cs
- AxImporter.cs
- ParameterCollection.cs
- TextCollapsingProperties.cs
- securitycriticaldataClass.cs
- ValueQuery.cs
- ObjectPersistData.cs
- Cloud.cs
- DynamicActionMessageFilter.cs
- PropertyPath.cs
- ReflectionUtil.cs
- ColorMatrix.cs
- UIElement3D.cs
- HelpInfo.cs
- GlobalItem.cs
- AppDomainManager.cs
- TextTreeFixupNode.cs
- XmlSchemaGroupRef.cs
- TemplateKey.cs
- FunctionImportElement.cs
- BaseTemplateCodeDomTreeGenerator.cs
- XmlArrayItemAttribute.cs
- ResumeStoryboard.cs
- WebEvents.cs
- Delegate.cs
- ComponentChangingEvent.cs
- TypeBuilder.cs
- XmlTextReaderImplHelpers.cs
- HostingEnvironment.cs
- SoapExtensionReflector.cs
- NullRuntimeConfig.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- HttpDictionary.cs
- ZipIOLocalFileHeader.cs
- PreProcessInputEventArgs.cs
- DependencyObjectType.cs
- NumberFunctions.cs
- WebPartsPersonalizationAuthorization.cs
- XPathArrayIterator.cs
- DataColumnSelectionConverter.cs
- SQLResource.cs
- Debugger.cs
- Errors.cs
- HttpResponseHeader.cs
- SafeNativeMemoryHandle.cs
- QueryOpeningEnumerator.cs
- ItemCheckEvent.cs
- JsonQNameDataContract.cs
- XPathSelfQuery.cs
- DataControlCommands.cs
- DesignerCategoryAttribute.cs
- DBSqlParser.cs
- ReversePositionQuery.cs
- Rijndael.cs
- CloudCollection.cs
- ResourceDescriptionAttribute.cs
- MembershipUser.cs
- Helpers.cs
- XmlCharCheckingWriter.cs
- MdiWindowListStrip.cs
- XmlDictionaryString.cs