QueryPath - это хорошо, но будьте осторожны с «состоянием отслеживания», если вы не понимаете, что это значит, это может означать, что вы тратите много времени на отладку, пытаясь выяснить, что произошло и почему код не работает.
Это означает, что каждый вызов в наборе результатов изменяет набор результатов в объекте, он не является цепным, как в jquery, где каждая ссылка является новым набором, у вас есть один набор, который является результатом вашего запроса, и каждый вызов функции изменяет этот единственный набор.
Чтобы получить jquery-подобное поведение, вам нужно выполнить ветвление, прежде чем выполнять операцию, подобную фильтрующему / изменяющему, что означает, что он будет более точно отражать то, что происходит в jquery.
$results = qp("div p");
$forename = $results->find("input[name='forename']");
$results
теперь содержит результирующий набор для input[name='forename']
НЕ исходный запрос "div p"
Это меня сильно смутило, я обнаружил, что QueryPath отслеживает фильтры, находит и все, что модифицирует ваши результаты и сохраняет их в объекте. вам нужно сделать это вместо
$forename = $results->branch()->find("input[name='forname']")
тогда $results
не будет изменен, и вы сможете снова и снова использовать набор результатов, возможно, кто-то, обладающий гораздо большими знаниями, может немного прояснить это, но в основном это похоже на то, что я нашел.