2016-07-21 4 views
2

у меня есть это:Xpath ребенок нескольких типов

XPath
.//*[@id='some_id']/td//div 

и теперь я хочу, чтобы выбрать любого ребенка в DIV, который определенного типа, например, каждый ребенок, который является либо этикетки или диапазона. Что-то вроде этого

.//*[@id='some_id']/td//div/(label|span)/....... 

но это недопустимо xpath. Как я могу это сделать (wthout писать два полных XPaths для данного примера для 2 типов детей)

+0

'.//*[@id='some_id ']/td // div/* [self :: label или self :: span] ' – splash58

+0

Путь, который вы указали (' td/div/(label | span) '), действителен в XPath 2.0, но не в XPath 1.0 , Пожалуйста, пометьте ваши вопросы «XPath 1.0», если вас интересует только 1.0. –

ответ

2

вам нужно использовать

нижестоящих ::

выбрать дочерние элементы определенного элемента , посмотреть на примере ниже,

.//*[@id='some_id']/td//div/descendant::label[@class='some-class'] 

выше XPath получите все этикетки с классом «некоторого класса», который на самом деле ребенок».//*[@id='some_id']/td// div/".

найти несколько дочерних элементы, то используйте ниже XPath,

.//*[@id='some_id']/td//div/descendant::*[local-name()='label' or local-name='span'] 
+0

потомок: охватывает детей, внуков и всех других потомков, а не только детей. В результате могут быть нежелательные метки. –

2

descendant:: находки на все ниже уровень, чтобы найти только дети используют

.//*[@id='some_id']/td//div/*[self::label or self::span] 
Смежные вопросы