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

Method Select

query.go:437–484  ·  view source on GitHub ↗
(t iterator)

Source from the content-addressed store, hash-verified

435}
436
437func (d *descendantQuery) Select(t iterator) NodeNavigator {
438 for {
439 if d.iterator == nil {
440 d.posit = 0
441 node := d.Input.Select(t)
442 if node == nil {
443 return nil
444 }
445 node = node.Copy()
446 d.level = 0
447 first := true
448 d.iterator = func() NodeNavigator {
449 if first {
450 first = false
451 if d.Self && d.Predicate(node) {
452 return node
453 }
454 }
455
456 for {
457 if node.MoveToChild() {
458 d.level = d.level + 1
459 } else {
460 for {
461 if d.level == 0 {
462 return nil
463 }
464 if node.MoveToNext() {
465 break
466 }
467 node.MoveToParent()
468 d.level = d.level - 1
469 }
470 }
471 if d.Predicate(node) {
472 return node
473 }
474 }
475 }
476 }
477
478 if node := d.iterator(); node != nil {
479 d.posit++
480 return node
481 }
482 d.iterator = nil
483 }
484}
485
486func (d *descendantQuery) Evaluate(t iterator) interface{} {
487 d.Input.Evaluate(t)

Callers 1

SelectMethod · 0.95

Calls 5

SelectMethod · 0.65
CopyMethod · 0.65
MoveToChildMethod · 0.65
MoveToNextMethod · 0.65
MoveToParentMethod · 0.65

Tested by

no test coverage detected