Выбор узлов с использованием xPath с объединениями

Я пишу базовую систему шаблонов отчетов HTML, основанную на управлении данными с помощью xPath. По сути, мне нужен запрос xPath, который будет выбирать узел или его дочерние элементы, если у них есть определенный класс.

$query = $xPath->query (".//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')]", $node); 

Я понимаю, что селектор .//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')] специально рассматривает узлы-потомки $node .

Мне нужен запрос xPath, который в основном запрашивает «узел или любой из его дочерних элементов». Я знаю, что существует оператор объединения, | , но я не видел, как это реализовать. Я бы предположил что-то вроде этого:. .[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')] | .//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')] .[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')] | .//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')] но это порождает ошибку Invalid expression .

Related of "Выбор узлов с использованием xPath с объединениями"