2016-11-14 2 views
0
<html><body> 
<div id="start"> 
    <div> 
     <div>NOT A TARGET</div> 
    </div> 
    <aBcDeFG> 
     <div>target</div> 
    </aBcDeFG> 
</div> 
</body></html> 

Существует документ, похожий на этот. Тег <aBcDeFG> - это случайный тег, сгенерированный на каждой странице обновления. Я написал выражение XPath с групповым символом, чтобы найти targetdiv:XPath: как извлечь узлы из пути, содержащего неизвестное имя тега?

$x('/html/body/div/*/div') 

Выражение возвращает два div с, а NOT A TARGET подобран: [div, div].

$x('/html/body/div/*[2]/div') не работает, возвращаемое значение пуст.

$x('/html/body/div/node()[2]/div') также не работает, возвращаемое значение пуст.

Как найти неизвестный тег только по его индексу?

ответ

0

Ваш /html/body/div/*[2]/div селектор is correct. Я думаю, у вас возникли трудности с извлечением узла в консоли инструментов разработчика. Попробуйте это:

$x('/html/body/div/*[2]/div')[0].innerHTML 

Пример использования document.evaluate

var r = document.evaluate('/html/body/div/*[2]/div', document, null, XPathResult.ANY_TYPE, null); 
 
var n = r.iterateNext(); 
 
console.log(n.innerHTML);
<html><body> 
 
<div id="start"> 
 
    <div> 
 
     <div>NOT A TARGET</div> 
 
    </div> 
 
    <aBcDeFG> 
 
     <div>target</div> 
 
    </aBcDeFG> 
 
</div> 
 
</body></html>

+0

'[position() = 2]' - это то же самое, что и '[2]'. – Tomalak

+0

Спасибо, я был в замешательстве в '[2]' в то время. Но теперь я поняла. – prehawk

0

попробовать

'(/html/body/div/*[2])/div' 
0

Если когда syou сказать "неизвестный" тег, вы имеете в виду "тег, отличный от DIV", вы могли бы используйте этот xpath:

/html/body/div/*[not(name(.)='div')]/div 
Смежные вопросы