Извлечь несколько таблиц HTML с HXT

Моя проблема заключается в том, что я должен извлечь все таблицы из HTML-документа и поместить их в список таблиц.

Следовательно, я понимаю, что конечный тип функции должен быть

getTable :: a [XmlTree] [[String]]

например со следующим xml:

<table class="t1">
<tr>
    <td>x</td>
    <td>y</td>
</tr>
<tr>
    <td>a</td>
    <td>b</td>
</tr>
</table>
<table class="t2">
<tr>
    <td>3</td>
    <td>5</td>
</tr>
<tr>
    <td>toto</td>
    <td>titi</td>
</tr>
</table>

я знаю, как извлечь все строки из одного xmlTree (example1) или из всех тегов "таблиц", которые предоставляют мне тип [XmlTree], но я не знаю, как отобразить стрелку example1 внутри результата test2.

Я уверен, что это очевидно, но я не могу найти это.

test2 ::  IO [[XmlTree]]
test2 = runX $ parseXML "table.xml" >>> is "table">>> listA getChildren

example1 ::  ArrowXml a => a XmlTree [String]
example1  = is "table" /> listA (getChildren >>> is "td"  /> getText)

1 ответ

Решение

Используя ту же общую идею, которая у вас есть в example1мы можем написать getTable как это

getTable :: ArrowXml a => a XmlTree [[String]]
getTable =  hasName "table" >>> listA (rows >>> listA cols) where
    rows = getChildren >>> hasName "tr"
    cols = getChildren >>> hasName "td" /> getText

Запуск стрелки на вашем примере документа производит

[[["x","y"],["a","b"]],[["3","5"],["toto","titi"]]]
Другие вопросы по тегам