我有一些问题 HXT, 虽然我怀疑它只是一些我失约箭。

我有一个XML结构喜欢

<str name="field1">value</str>
<lst name="field2"><str>value2</str><str>value3</str></lst>

和内部结构

data XmlData = XmlStr String | XmlList XmlData

有没有办法收集的元素中的一个步骤的一个箭头?

getXmlData :: IOSArrow XmlTree (String, XmlData)
getXmlData = (getAttrl >>> getChildren >>> getText) &&& 
      ((filterByType "str" >>> getText >>> arr (\x -> XmlStr x))
      <+> (filterByType "lst" >>> getXmlData))
  where filterByType t = isElem >>> hasName t >>> getChildren

递呼吁getXmlData需要收集它的回答和包裹在XmlList构造,但我不知道如何收集的条款。目前我完成这些后处理关于输出(在收集名称相同),但是我想一个更好的解决方案。

有帮助吗?

解决方案

在一般可以使用 listAControl.Arrow.ArrowList 要做到这一点。它具有类型 (ArrowList a) => a b c -> a b [c] 和一个

组合转换一个箭头 成determinstic版的所有 结果收集在一个单一的元素 名单。

(见我的答案 在这里,在这里, 对于一个具体的例子。)

在这一特定情况下可以使用 >. 组合的 XmlList 构造作为其第二个论点来完成同样的事情更加简明扼要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top