我正在尝试解析 XML,但我想过滤并仅从给定节点中提取确定数量的子节点。例如:
<root>
<node id="a" />
<node id="b" />
<node id="c" />
<node id="d" />
</root>
然后,如果我执行箭头getChildren >>> myFilter 2
,我将只取回 ID 为“a”和“b”的节点。
直觉告诉我应该使用状态箭头来跟踪,但我不知道该怎么做。
我试着自己做,但这不是我想要的,看起来不是很优雅,也不起作用。我尝试使用runSLA
整数参数作为初始状态运行我的箭头链,然后定义:
takeOnly :: IOSLA Int XmlTree XmlTree
takeOnly = changeState (\s b -> s-1)
>>> accessState (\s b -> if s >= 0 then b else Nothing)
但是我当然不能返回Nothing
,我需要返回一个 XmlTree。但我根本不想退货!
那里可能有更好的方法。你能帮助我吗?
感谢您的时间和帮助!