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
- DataTableCollection.cs
- MultilineStringConverter.cs
- ClientOptions.cs
- FixedSOMTableCell.cs
- ContourSegment.cs
- UserNameSecurityTokenProvider.cs
- ISCIIEncoding.cs
- SqlRemoveConstantOrderBy.cs
- TableLayoutPanelCodeDomSerializer.cs
- EntitySqlQueryCacheKey.cs
- ProjectionPlanCompiler.cs
- ObjectSecurity.cs
- BufferedStream.cs
- XmlSchemaObjectTable.cs
- DrawingGroup.cs
- ViewStateAttachedPropertyFeature.cs
- OutOfProcStateClientManager.cs
- ConnectionPoint.cs
- XmlArrayItemAttribute.cs
- NavigationCommands.cs
- MailHeaderInfo.cs
- FileVersion.cs
- EdmSchemaError.cs
- ImagingCache.cs
- SapiInterop.cs
- SignatureHelper.cs
- TypeConverter.cs
- OletxVolatileEnlistment.cs
- AsynchronousChannel.cs
- TypeResolver.cs
- UrlRoutingHandler.cs
- AutomationProperty.cs
- CookieHandler.cs
- XPathPatternBuilder.cs
- CompiledQuery.cs
- ReferenceSchema.cs
- DataGridViewColumnEventArgs.cs
- PolyBezierSegment.cs
- RelationshipWrapper.cs
- PageCache.cs
- XPathSelectionIterator.cs
- AutomationElementCollection.cs
- SessionStateItemCollection.cs
- MobileListItem.cs
- NullableBoolConverter.cs
- IDQuery.cs
- XmlSchemaSimpleContentExtension.cs
- InvalidComObjectException.cs
- QilReference.cs
- SamlAdvice.cs
- DataConnectionHelper.cs
- SystemColors.cs
- TableItemPatternIdentifiers.cs
- IUnknownConstantAttribute.cs
- GridViewRowCollection.cs
- X509SecurityTokenAuthenticator.cs
- SettingsPropertyCollection.cs
- XmlSchemaComplexContentRestriction.cs
- ConfigErrorGlyph.cs
- DataControlField.cs
- DbExpressionBuilder.cs
- DataSourceView.cs
- Native.cs
- Region.cs
- CheckBoxFlatAdapter.cs
- StylusPlugin.cs
- InputGestureCollection.cs
- SchemaCreator.cs
- DbQueryCommandTree.cs
- SHA384.cs
- AddInController.cs
- MatrixAnimationUsingKeyFrames.cs
- BinaryFormatterWriter.cs
- RefreshEventArgs.cs
- OleDbEnumerator.cs
- SqlNotificationEventArgs.cs
- EmptyImpersonationContext.cs
- EventMappingSettingsCollection.cs
- GlyphingCache.cs
- BamlTreeUpdater.cs
- RenamedEventArgs.cs
- LinqDataSourceHelper.cs
- BaseCodeDomTreeGenerator.cs
- UserNameSecurityTokenProvider.cs
- HostVisual.cs
- HelpKeywordAttribute.cs
- XmlNamespaceMapping.cs
- HtmlForm.cs
- SimpleBitVector32.cs
- SendingRequestEventArgs.cs
- ListItemDetailViewAttribute.cs
- _DomainName.cs
- AssemblyBuilder.cs
- RenderContext.cs
- PathNode.cs
- CommandEventArgs.cs
- IncomingWebResponseContext.cs
- TemplateColumn.cs
- MouseGesture.cs
- HttpResponseWrapper.cs