У меня есть несколько таблиц на веб-сайте, например:

<table>
  <tr>
    <td>Name</td>
    <td>foo</td>
  </tr>
  <tr>
    <td>Count</td>
    <td>15</td>
  </tr>
  <tr>
    <td>Date</td>
    <td>2014-11-17</td>
  </tr>
</table>
<table>
  <tr>
    <td>Name</td>
    <td>bar</td>
  </tr>
  <tr>
    <td>Count</td>
    <td>42</td>
  </tr>
  <tr>
    <td>Date</td>
    <td>2014-12-24</td>
  </tr>
</table>
...

Я хочу получить что-то вроде этого

foo    15
bar    42

Моя первая попытка в xidel была xidel --xpath "//table/tr[1]/td[2]" --xpath "//table/tr[2]/td[2]", но это дает

foo
bar

15
42

Как извлечь два значения в одну строку?

2
Simon 17 Ноя 2014 в 18:03

2 ответа

Использование XPath или XQuery 3.0: //table/tbody/(tr[1]/td[2] || ' ' || tr[2]/td[2]). Я думаю, вам нужно запросить эту версию явно, по крайней мере, мне нужно было сделать это на http://videlibri .sourceforge.net/cgi-bin/xidelcgi. И я проанализировал как HTML, где синтаксический анализатор добавляет элемент tbody, и путь тоже нуждается в этом.

2
Martin Honnen 17 Ноя 2014 в 19:53
xidel-0.9.5.4998.exe -s --input-format=xml <input> ^
                     --xquery "//table/concat(tr[1]/td[2],'&#09;',tr[2]/td[2])"
foo     15
bar     42
1
Reino 15 Июл 2016 в 19:55
Это похоже на команду, но она не упакована должным образом, и в ней отсутствует описание того, что вы делаете и как это работает.
 – 
Adam Katz
15 Июл 2016 в 21:09