Учитывая следующую таблицу HTML:
<table>
<tbody>
<tr>
<td>
<a href="">Example 1</a>
,
<a href="">Example 2</a>
</td>
</tr>
<tr>
<td>
<a href="">Example 1</a>
,
<a href="">Example 2</a>
,
<a href="">Example 3</a>
</td>
</tr>
<!-- ... -->
<!-- Variable amount of rows with variable amount of anchor texts -->
<!-- ... -->
</tbody>
</table>
Можно ли получить следующие результаты из не замужем XPath запрос?
Example 1, Example 2
Example 1, Example 2, Example 3
Я старался:
string(/table/tbody/tr/td//node())
Это, очевидно, не работает по следующей причине:
строка (объект?)
преобразует любой из четырех типов данных XPath в строку в соответствии со встроенными правилами. Если значением аргумента является набор узлов, функция возвращает строковое значение первого узла в порядке документа, игнорируя любые другие узлы.
— Википедия
РЕДАКТИРОВАТЬ
Я использую PHP Поддержка XPath которые поддерживают только v1.0.
Запрос XPath предназначен для вставки пользователем в файл конфигурации библиотеки веб-скребка, которую я создаю.
В XPath 2.0 вы можете сделать
//tr/string-join(.//a/text(), ", ")
или же
//tr/string(normalize-space(td))
Example 1, Example 2
Example 1, Example 2, Example 3
Вы также можете использовать libs / features языка программирования для получения выходных данных (если вам нужно решение XPath 1.0). Например, используя Python lxml.html
for tr in source.xpath('//tr'):
print(', '.join([a.text for a in tr.xpath('./td/a')]))
Других решений пока нет …