Учитывая следующую структуру:
A.узел body с правами root
B. body содержит только узлы span, назовите их spans верхнего уровня
C. spans верхнего уровня содержит комбинации (1) текстовых узлов (2) span с классом, назовите их spans нижнего уровня
D. Нижний диапазон содержит только текстовые узлы
Нам нужно извлечь каждый верхний уровень, который имеет один или несколько нижних уровней с классами "a" или "b".
Наш лучший выстрел еще:
//span//span[contains(concat(' ', normalize-space(@class), ' '), ' qri ') or contains(concat(' ', normalize-space(@class), ' '), ' ktiv ')]
, но он дает более низкие уровни пролета.
Демонстрация:
x = new XPathEvaluator();
var it = x.evaluate("//span//span[contains(concat(' ', normalize-space(@class), ' '), ' a ') or contains(concat(' ', normalize-space(@class), ' '), ' b ')]", document.body.cloneNode(true));
var results = [];
for (var current = it.iterateNext(); current; current = it.iterateNext()) {
results.push(current.id);
}
console.log(results);
<span id="top1">In a<span id="a1" class="a">ultrices felis</span><span id="b1" class="b">sollicitudin felis</span></span>
<span id="top2">congue velit<span id="a2" class="a">Sed porttitor</span>Phasellus posuere</span>
<span id="top3">purus. Etiam<span id="b2" class="b">tellus, ultrices</span>Morbi interdum</span>
<span id="top4">leo malesuada tristique</span>
Желаемый вывод:
[
"top1",
"top2",
"top3"
]