Объединение нескольких результатов одного запроса XPath

Учитывая следующую таблицу 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 запрос?

  1. Example 1, Example 2

  2. Example 1, Example 2, Example 3


Я старался:

string(/table/tbody/tr/td//node())

Это, очевидно, не работает по следующей причине:

строка (объект?)

преобразует любой из четырех типов данных XPath в строку в соответствии со встроенными правилами. Если значением аргумента является набор узлов, функция возвращает строковое значение первого узла в порядке документа, игнорируя любые другие узлы.

— Википедия


РЕДАКТИРОВАТЬ

Я использую PHP Поддержка XPath которые поддерживают только v1.0.

Запрос XPath предназначен для вставки пользователем в файл конфигурации библиотеки веб-скребка, которую я создаю.

1

Решение

В 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')]))
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]