質問
私は、私はそれだけだ疑いがあるものの、 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のコンストラクタで、それの答えとラップを収集する必要があるが、私は用語を収集する方法がわかりません。現在、私は(同じ名前で収集)出力にいくつかの後処理でこれを達成するんだけど、私はよりよい解決策をしたいと思います。
解決
あなたからlistA
を使用することができ、一般的には、<のhref = "http://hackage.haskell.org/packages/archive/hxt/9.0.0/doc/html/Control-Arrow-ArrowList.html" のrel =」 nofollowをnoreferrer "> Control.Arrow.ArrowList
にこれを実行します。これは、タイプ(ArrowList a) => a b c -> a b [c]
があり、
矢印を変換するためのコンビネータ すべてとdeterminsticバージョンに 単一の要素に収集結果 一覧ます。
(私の答えはここにhref="https://stackoverflow.com/questions/3897283/haskell-hxt-for-extracting-a-list-of-values/3897533#3897533"> そして、ここの具体的な例。)
この特定のケースでは、より簡潔に、同じことを達成するために2番目の引数として>.
コンストラクタでXmlList
コンビネータを使用することができます。
所属していません StackOverflow