Почему для TreeWalker currentNode по умолчанию используется корневой узел?

Почему при создании TreeWalker currentNode указывает на корень, даже если он не соответствует критериям фильтра?

Я ожидал, что он будет нулевым, пока я не вызову nextNode, чтобы я мог видеть, передает ли корень критерии фильтрации, переданные ему.

Я думаю, что это так, как я задумал, я просто не совсем понимаю причину. Это не подходит для моего случая использования поиска всех элементов с определенным набором атрибутов, включая корень. Если я подхожу к родителю корня, я включаю братьев и сестер, которые мне не нужны.

2 ответа

Решение

Текущий узел не представляет результат последнего вызова метода, но он обозначает текущее состояние обхода, узел, из которого сделан следующий шаг. Он никогда не должен быть нулевым и действительно может быть узлом, который не пройдет фильтр - его можно установить произвольно (вручную, а не только с помощью пошаговых методов).

Только возвращаемые значения всех вызовов методов будут отфильтрованы узлами, и они могут быть null,

Это не подходит для моего случая использования поиска всех элементов с определенным набором атрибутов, включая корень.

С использованием parentNode метод должен в конечном итоге привести вас к корневому узлу, если он соответствует фильтру, или null иначе.

currentNode указывает на корень, потому что тогда он может рекурсивно пересечь поддерево документа, вызывая каждый childNode как корень своего собственного дерева. Это не обязательно указывает на корень документа, просто root узел, с которым было создано дерево. Увидеть tree traversal

Другие вопросы по тегам