MCPcopy Create free account
hub / github.com/antchfx/xpath / Select

Method Select

query.go:527–580  ·  view source on GitHub ↗
(t iterator)

Source from the content-addressed store, hash-verified

525}
526
527func (f *followingQuery) Select(t iterator) NodeNavigator {
528 for {
529 if f.iterator == nil {
530 f.posit = 0
531 node := f.Input.Select(t)
532 if node == nil {
533 return nil
534 }
535 node = node.Copy()
536 if f.Sibling {
537 f.iterator = func() NodeNavigator {
538 for {
539 if !node.MoveToNext() {
540 return nil
541 }
542 if f.Predicate(node) {
543 f.posit++
544 return node
545 }
546 }
547 }
548 } else {
549 var q *descendantQuery // descendant query
550 f.iterator = func() NodeNavigator {
551 for {
552 if q == nil {
553 for !node.MoveToNext() {
554 if !node.MoveToParent() {
555 return nil
556 }
557 }
558 q = &descendantQuery{
559 Self: true,
560 Input: &contextQuery{},
561 Predicate: f.Predicate,
562 }
563 t.Current().MoveTo(node)
564 }
565 if node := q.Select(t); node != nil {
566 f.posit = q.posit
567 return node
568 }
569 q = nil
570 }
571 }
572 }
573 }
574
575 if node := f.iterator(); node != nil {
576 return node
577 }
578 f.iterator = nil
579 }
580}
581
582func (f *followingQuery) Evaluate(t iterator) interface{} {
583 f.Input.Evaluate(t)

Callers

nothing calls this directly

Calls 7

SelectMethod · 0.95
SelectMethod · 0.65
CopyMethod · 0.65
MoveToNextMethod · 0.65
MoveToParentMethod · 0.65
MoveToMethod · 0.65
CurrentMethod · 0.65

Tested by

no test coverage detected