3

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コンストラクターでラップする必要がありますが、用語を収集する方法がわかりません。現在、私は出力のいくつかの後処理(同じ名前で収集)でこれを達成していますが、より良い解決策が欲しいです。

4

1 に答える 1

3

一般に、これを行うにはlistAfromControl.Arrow.ArrowListを使用できます。タイプ(ArrowList a) => a b c -> a b [c]があり、

すべての結果が単一の要素リストに収集された決定論的なバージョンに矢印を変換するためのコンビネータ。

(具体的な例については、こちらこちらの回答を参照してください。)

この特定のケースでは、>.コンビネータとXmlListコンストラクタを 2 番目の引数として使用して、同じことをより簡潔に行うことができます。

于 2010-10-27T12:33:48.213 に答える