在HXT(Haskell)中,如何将箭头结果放入自定义数据结构中?

在HXT(Haskell)中,如何将箭头结果放入自定义数据结构中?,haskell,hxt,Haskell,Hxt,我试图找到一种解析HTML并将其转换为自定义数据结构的方法。例如,我有一本很短的“小说”,在HTML中是这样的: Test.html: 测验 第2章第1款的内容 第2章第2段的内容 第2章第3段的内容 第2章第4段的内容 第三章第1款的内容 第三章第2款的内容 第三章第3段的内容 第三章第4段的内容 我想把它变成这样: Novel [ Chapter [Para, Para] , Chapter [Para, Para] ] 换句话说,一部小说有一个或多个章节,每个章节有一个或多个段落,每

我试图找到一种解析HTML并将其转换为自定义数据结构的方法。例如,我有一本很短的“小说”,在HTML中是这样的:

Test.html:


测验
第2章第1款的内容

第2章第2段的内容

第2章第3段的内容

第2章第4段的内容

第三章第1款的内容

第三章第2款的内容

第三章第3段的内容

第三章第4段的内容

我想把它变成这样:

Novel [ Chapter [Para, Para] , Chapter [Para, Para] ]
换句话说,一部小说有一个或多个章节,每个章节有一个或多个段落,每个段落都是一个字符串

以下是我目前掌握的情况:

modulemain其中
导入Text.XML.HXT.Core
导入Text.HandsomeSoup
数据新奇=新奇{title::String,
章::[章]}
数据章节=章节[段]
数据段=段[字符串]
main::IO()
main=do
内容>>css“div”>>>(ifA(css“a”>>“名称”)(此)(无))
chaps>css“a”!“姓名”
打印$names
印刷章
--现在为每一章制作一章[段落]。
--像这样的?
--第$[(runX chapsRaw>>>css“p”>>>段)]
到目前为止还不错,但我陷入了困境,无法将这些数据导入到我的自定义数据结构中


我有点理解箭头会同时在所有东西上运行,但我不确定如何将所有这些数据塞进我的自定义数据结构中,因为箭头对我来说仍然有点神秘

假设您说每个段落都是一个字符串,我假设您在代码中犯了一个错误,而是想声明

data Para=Para字符串
为了最终将数据放入结构中,您可能需要使用,它允许您发布构造器

整理段落 对于每个章节,段落节点将有一个文本子节点,因此可以使用

css“p”>>getChildren>>>getText>>^Para
它选择
节点,拉出它们的子文本节点,并将其转换为Para

整理章节 将上述箭头直接应用于
chapsRaw
将收集所有章节的段落,而不是每章一段

可能有一种更为惯用的方法,但一种简单的方法是使用,它收集列表箭头的结果

整件事
runX$chapsRaw>>listA(css“p”>>getChildren>>>getText>>^Para)>>^Chapter

如果您说每个段落都是一个字符串,那么我假设您在代码中犯了一个错误,而是想声明

data Para=Para字符串
为了最终将数据放入结构中,您可能需要使用,它允许您发布构造器

整理段落 对于每个章节,段落节点将有一个文本子节点,因此可以使用

css“p”>>getChildren>>>getText>>^Para
它选择
节点,拉出它们的子文本节点,并将其转换为Para

整理章节 将上述箭头直接应用于
chapsRaw
将收集所有章节的段落,而不是每章一段

可能有一种更为惯用的方法,但一种简单的方法是使用,它收集列表箭头的结果

整件事
runX$chapsRaw>>listA(css“p”>>getChildren>>>getText>>^Para)>>^Chapter