Получите только самые верхние узлы с xPath, дочерние узлы должны быть исключены
Использование XPath 1.0
<div id="master">
<div someAttr id="1">
<div someAttr id="1-1">
<div someAttr id="1-1-1">
<div someAttr id="1-1-1-1">innermost child</div>
</div>
</div>
</div>
<div someAttr id="2">
<div someAttr id="2-1">
<div someAttr id="2-1-1">
<div someAttr id="2-1-1-1">innermost child</div>
</div>
</div>
</div>
</div>
Я использую этот запрос, который выбирает все узлы, имеющие атрибут, начинающийся с 'some'
//*[@*[starts-with(name(), 'some')]]
Мне нужны только самые верхние узлы. Например, элементы с идентификаторами 1 и 2. И если я использую тот же запрос для элемента с идентификатором 1, тогда я должен получить элемент с идентификатором 1-1 и т. Д.
Как этого добиться с помощью xpath?
1 ответ
Чтобы получить только самые внешние узлы, вы можете попробовать отфильтровать узлы, имеющие предка с атрибутом, который начинается с "name":
//*[.... and not(ancestor::*[@*[starts-with(name(), 'some')]])]
Таким образом, все выражение Xpath выглядит так:
//*[
@*[starts-with(name(), 'some')]
and
not(ancestor::*[@*[starts-with(name(), 'some')]])
]