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
- DrawToolTipEventArgs.cs
- CodeGotoStatement.cs
- DecimalConstantAttribute.cs
- PassportIdentity.cs
- UpWmlMobileTextWriter.cs
- ListViewUpdateEventArgs.cs
- DataGridColumn.cs
- WebPartCatalogAddVerb.cs
- Native.cs
- Visual3D.cs
- webeventbuffer.cs
- MessagingActivityHelper.cs
- Typeface.cs
- Odbc32.cs
- SqlBuilder.cs
- DelayedRegex.cs
- SystemIPGlobalProperties.cs
- HashHelper.cs
- LookupBindingPropertiesAttribute.cs
- MatrixKeyFrameCollection.cs
- SqlCharStream.cs
- SchemaHelper.cs
- SecurityIdentifierElementCollection.cs
- SID.cs
- DataProtection.cs
- UserControlBuildProvider.cs
- AutomationIdentifierGuids.cs
- AnnotationComponentManager.cs
- sitestring.cs
- SizeKeyFrameCollection.cs
- AttributeParameterInfo.cs
- Number.cs
- ConfigXmlText.cs
- DataGridViewColumnTypeEditor.cs
- OverlappedAsyncResult.cs
- SudsCommon.cs
- CodeAttributeArgument.cs
- CssStyleCollection.cs
- CollectionBuilder.cs
- CommonDialog.cs
- ObjectDataSourceEventArgs.cs
- ResolveDuplexAsyncResult.cs
- DataColumnMappingCollection.cs
- OptimisticConcurrencyException.cs
- ClientBuildManager.cs
- PointHitTestResult.cs
- SelectionManager.cs
- IPAddress.cs
- MULTI_QI.cs
- NavigatingCancelEventArgs.cs
- InvalidEnumArgumentException.cs
- ConfigurationStrings.cs
- MultitargetUtil.cs
- HttpWebRequest.cs
- HMACSHA384.cs
- GenericEnumerator.cs
- Random.cs
- OutputScope.cs
- MenuItemBinding.cs
- DiagnosticTrace.cs
- PrivateFontCollection.cs
- ReferencedCollectionType.cs
- RadioButtonBaseAdapter.cs
- CompositeFontFamily.cs
- OrderPreservingPipeliningMergeHelper.cs
- FastPropertyAccessor.cs
- TextElementEnumerator.cs
- PermissionToken.cs
- indexingfiltermarshaler.cs
- DiscoveryClientRequestChannel.cs
- Size3D.cs
- TextElementEditingBehaviorAttribute.cs
- EditorBrowsableAttribute.cs
- HtmlListAdapter.cs
- TextElementCollectionHelper.cs
- CommandTreeTypeHelper.cs
- AsyncPostBackTrigger.cs
- ToolStripContentPanelRenderEventArgs.cs
- GridEntry.cs
- Transactions.cs
- RegistrySecurity.cs
- XmlQualifiedName.cs
- SqlTransaction.cs
- TypeDescriptionProviderAttribute.cs
- OdbcParameterCollection.cs
- FixedTextSelectionProcessor.cs
- ResourcePermissionBase.cs
- BufferedStream.cs
- LinearKeyFrames.cs
- ListMarkerLine.cs
- SpellerStatusTable.cs
- TextWriterEngine.cs
- DependentList.cs
- HttpConfigurationSystem.cs
- NumberSubstitution.cs
- IMembershipProvider.cs
- LoginDesigner.cs
- PtsHelper.cs
- EmbeddedMailObjectsCollection.cs
- ExpressionBinding.cs