2011-01-30 2 views
4

Просмотр источника, я табличные данные отформатированы точно так:XPath: как не совпадают следующие данные

<tr class="even"> 
    <td>apple</td> 
    <td>pear</td> 
    <td>orange</td> 
    </tr> 
    <tr class="odd"> 
    <td>apple</td> 
    <td>pear</td> 
    <td>&nbsp</TD> 
    </tr> 
    <tr class="even"> 
    <td>apple</td> 
    <td>pear</td> 
    <td>orange</td> 
    </tr> 

Как бы идти о не соответствуя <td> содержащий & NBSP во всех строках, где это происходит?

+0

Хороший вопрос, +1. См. Мой ответ для объяснения и три полных однолинейных решения XPath. :) –

ответ

5

Субъект &nbsp; не то, что XPath о знает - то лучше использовать его эквивалент (самоопределяющийся) характер сущность &#xA0;

Чтобы выбрать все td х верхний элемент - table, что не содержит &nbsp; использования:

/table/tr/td[not(contains(., '&#xA0;'))] 

Чтобы выбрать все строки этой таблицы, такие, что ни один из их td детей не содержит &nbsp; использование:

/table/tr[not(td[contains(., '&#xA0;')])] 

Для выбора всех td детей всех строк этой таблицы таким образом, что ни один из их td детей не содержит &nbsp; использование:

/table/tr[not(td[contains(., '&#xA0;')])]/td 
+0

Хороший ответ. Не знаю о ' ';) –

+0

@ Оскар-Медерос: Да, сущности обрабатываются и заменяются * до того, как * XML-документ анализируется - следовательно, XPath (работающий с XML Infoset - результат анализа) не знать о сущности. –

+0

+1 для правильного ответа. – Flack

Смежные вопросы