使用hxt提取多个html表

时间:2012-06-06 09:54:28

标签: haskell 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)或所有标签“tables”中检索所有行,它提供了类型[XmlTree],但我不知道如何在test2的结果中映射箭头example1 。

我确定它很明显,但我找不到它。

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 个答案:

答案 0 :(得分:3)

使用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"]]]