我正在尝试使用 HXT 解析 ods(libreoffice 电子表格)文件并遇到问题。在电子表格中,一行有许多单元格(所有单元格名称为“cell”),而电子表格有很多行(所有单元格名称为 row)。当我尝试获取单元格的文本时,代码将它们混合在一起,最终得到一大堆不按行分隔的单元格......
尝试解析以下内容时:
<spreadsheet>
<row>
<cell> <p>ABC</p> </cell>
<cell> <p>DEF</p> </cell>
<cell> <p>GHI</p> </cell>
</row>
<row>
<cell> <p>abc</p> </cell>
<cell> <p>def</p> </cell>
<cell> <p>ghi</p> </cell>
</row>
<row>
<cell> <p>123</p> </cell>
<cell> <p>456</p> </cell>
<cell> <p>789</p> </cell>
</row>
</spreadsheet>
使用代码:
import Text.XML.HXT.Core
play arg = do { results <- runX (processor arg) ; print results }
atTag x = getChildren >>> isElem >>> hasName x
processor filename =
readDocument [withValidate no] filename >>>
atTag "spreadsheet" >>>
atTag "row" >>>
atTag "cell" >>>
atTag "p" >>>
getChildren >>> getText
它给出 [ABC, DEF, GHI, abc, def, ghi, 123, 456, 789] 而我想要的是 [[ABC, DEF, GHI], [abc, def, ghi], [123, 456, 789] ]。
我究竟做错了什么?