だから私はこのXMLファイルを解析しています。内部のノードに到達すると、コード用に1つの子、記述用に1つ、外部ノード参照を保持する1つ以上の(孫)ノードがあります。
最初に単純な矢印表記と<+>集計を試して、必要なすべての情報を取得しましたが、それは大きなリストを表示するだけで、これを実現するためのよりエレガントな方法があるのではないかと思いました。
そこで、代わりに矢印表記を試して、コードを線に沿って見せるようにしました。
import Text.XML.HXT.Core
getDocument cale = readDocument [withValidate no] cale
atName name=deep (hasName name)
text = getChildren>>>getText
getList = deep (hasName "list-info")>>>
proc x -> do
desc <- text <<< atName "desc" -< x
code <- text <<< atName "code" -< x
refs <- getAttrValue "idref" <<< deep (hasName "service-id-ref") -< x
returnA -< (desc,code,refs)
基本的にdeepは、このフィルターについて理解している限り、同じレベルのすべての「service-id-ref」ノードを返すことになっていますが、「list-info」名を満たす最初のノードには2つの「service-id-ref」子があります2つの異なる孫ノードとrefのノードは、毎回最初のノードにのみバインドされます。つまり、基本的には(String、String、[String])の3タプルを期待していましたが、取得したのは3つの通常の文字列だけです。
do-notation(または一般的に)の矢印についての私の理解が不十分なためですか、それとも他の方法でrefをバインドしようとする必要がありますか?
前もって感謝します