2015-11-04 3 views
1

У меня есть HTML-код, как это:В XPath как выбрать узел по тексту независимо от того, какой текст у него есть?

<table> 
    <tbody> 
     <tr> 
      <td> John 
      <font color="red"> 
      <b>Unemployed</b> 
      </font> 
      <br/>ID 12345<b> 
      some Text</b> 
      <br/> 
      </td> 
     </tr> 
    </tbody> 
</table> 

Есть еще некоторые tr в коде, но это всего лишь пример Я хочу, чтобы выбрать td узел, который имеет определенный текст ID так что в этом случае будет быть 12345.

я мог бы достичь ID с помощью следующего XPath:

HTML/TABLE/descendant::*[contains(text()[3], '12345')] 

Но я хочу, чтобы избежать использования индекса [3]. Я также попытался с

HTML/TABLE/descendant::*[contains(., '12345')] 

Но выбирает tbody.

Любая идея, как это сделать?

+0

Вы хотите использовать XPath? – Jonesopolis

+0

Если XPath не требуется. Вы можете сделать это просто с Linq To XML. – CodeNotFound

ответ

1

В XPath, чтобы выбрать узел по тексту, независимо от того, какой текст ребенка, используйте //, и .:

//td[contains(., '12345')] 

Пояснение:

  • //td выбирает все td элементы документ.
  • //td[условие] ограничивает выбор для тех td, которые удовлетворяют условию .
  • . - текущий узел (td); внутри это значение строка текущего узла:

    John 
    
          Unemployed 
    
          ID 12345 
          some Text 
    
  • , учитывая выше строки значение ., действительно содержит «12345» и так оценивается как истина без указания точного текста узла, как просили.
+0

Прохладный человек, спасибо, что это работает отлично в поиске Chrome. Я попробую это с моим кодом :) – Yoiku

0

Как насчет //td[ contains(., '12345') ]?

Работы для меня. Это то, что вы хотите?