Xpath, как получить текст из узлов-потомков - PullRequest
0 голосов
/ 01 марта 2019

У меня есть что-то вроде этого:

<div id="m0">
...
 <tr>
  <td></td>
  <td></td>
  <td>Radio</td>
 </tr>
</div>

<div id="m1">
...
<tr>
  <td></td>
  <td></td>
  <td> 
    <a>TV channel</a>
    <font color="#555555">...</font>
  </td>
</tr>
<tr>
  <td></td>
  <td></td>
  <td>
     <i> </i>
  </td>
</tr>
<tr>
  <td></td>
  <td></td>
  <td> 
     <i> Other channel </i>
  </td>
</tr>

Я хочу получить это в результате: ['Radio','TV Channel',' ','Other channel]

Я пытался сделать: ch_nodes=tree.xpath('//div[@id="%s"]/table[@class= "fl"]/tr/td[3]/descendant-or-self::*'%div)

После этого для каждого узла я получаю текст, но он дает мне узлы, которые мне не нужны, как <font> содержимое.

Я тоже пробовал это: ch_nodes=tree.xpath('//div[@id="%s"]/table[@class= "fl"]/tr/td[3]/descendant-or-self::*[2]'%div), но не дает мне самоконтента, если не имеет дочерних узлов.

Как я могу получить ['Radio','TV Channel',' ','Other channel]?

1 Ответ

0 голосов
/ 02 марта 2019

Получить каждый первый текстовый узел из tr:

$x("//table//tr//*[1]/text()")

Если вы хотите получить каждый первый непустой текстовый узел из tr:

$x("//table//tr//*[boolean(string-length(normalize-space(text())))][1]/text()")

...