Я пишу базовую систему шаблонов отчетов 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
.