2015-04-30 9 views
-1

У меня есть блок кода и вам нужно получить данные из него и попробовать разные версии команд xpath, но без успеха.Xpath получить элемент с условием

<div> 
    <div class="some_class"> 
     <a title="id" href="some_href"> 
      <nobr>1<br> 
     </a> 
    </div> 
    <div class="some_other_class"> 
     <a title="name" href="some_href"> 
      <nobr>John<br> 
     </a> 
    </div> 
</div> 

<div> 
    <div class="some_class"> 
     <a title="id" href="some_href"> 
      <nobr>2<br> 
     </a> 
    </div> 
    <div class="some_other_class"> 
     <a title="name" href="some_href"> 
      <nobr>John<br> 
     </a> 
    </div> 
</div> 

// and many blocks like this 

Таким образом, эти блоки div одинаковы, за исключением того, что они отличаются по содержанию его подэлемента. Мне нужно XPATH запрос, чтобы получить HREF Джона, который <a title="id"> равен 1.

Я пытался что-то вроде этого:

//div[./div/nobr='1' AND ./div/nobr='John'] 

получить только DIV, который содержит данные мне нужно, и тогда не будет трудно чтобы получить Джон.

Кроме того, я сумел получить HREF Джона с:

//a[./nobr='John'][@title='name']/@href 

, но таким образом он не зависит от значения от <a title="id"...> элемента, но он должен зависеть от него.

Любые предложения?

+1

Если вы хотите получить «John's href», почему бы вам не создать пример, где John's href отличается от других атрибутов «href», чтобы вы могли четко выразить то, что хотите? – kjhughes

+1

Кроме того, имейте в виду, что XPath определяется только на хорошо сформированной разметке, которой не является ваш пример: существует несколько корневых элементов и несколько незакрытых элементов. – kjhughes

+0

Это не о href, я ясно сказал, что мне нужен href, который находится внутри «суперэлемента» Джона, т. Е. John является подэлементом тега , который имеет атрибут href, в котором я нуждаюсь. Незакрытый элемент - это опечатка. Спасибо за ваши щедрые мелкие замечания :) –

ответ

0

Я думаю что вы хотите

//div/div[a/@title='id']/following-sibling::div[1]/a/@href 

, который, учитывая хорошо сформированный входной документ, будет возвращать (индивидуальные результаты, разделенные --------):

href="some_href" 
----------------------- 
href="some_href" 

Вы не объяснить это очень ясно, хотя, как отметил kjhughes, и, возможно, ваш образец HTML не идеален.

Что касается ваших попыток выражения пути, как вход HTML, это трудно понять,

<nobr>John<br> 

означает ли, что «Джон» является внутриnobr элемент или нет.

0

Спасибо Mathias, ваш пример был полезным, но поскольку существует много элементов с @ title = 'id', это не надежное решение, которое всегда будет ловить хорошие элементы.

Мне удалось сделать обходной путь, сначала поймал весь div, а затем извлек href мне нужно.

//div[./div/a[@title='name']/nobr='John' and ./div/a[@title='id']/nobr='1'] 
//a[./nobr='John'][@title='name']/@href 
Смежные вопросы