質問

私は、私はそれだけだ疑いがあるものの、 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コンビネータを使用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top