HaskellでXMLファイルを解析する必要があったので、HXTを選択しました。私は今のところそれが好きですが、1つのことを行う方法を理解するのに苦労しています。
私が解析しているファイルには、構成ファイルとしての情報が含まれています。に似た構造になっています
<clients>
<client>
<name>SomeName</name>
<info>MoreInfo</info>
<table>
<row>
<name>rowname1</name>
<value>rowvalue1</value>
</row>
<row>
<name>rowname2</name>
<value>rowvalue2</value>
</row>
</table>
</client>
...
</clients>
このマークアップ形式は私をうんざりさせますが、それは私が取り組まなければならないものです。
私はHaskellでこれらのそれぞれの記録を次のように持っています
data Client = Client { name :: String, info :: String, table :: Table }
data Row = Row { name :: String, value :: String }
type Table = [Row]
そして、ファイルからデータをリストとして取得したいと思いますClients
。私の現在のコードは次のようになります
data Client = Client { name :: String, info :: String, table :: Table }
data Row = Row { name :: String, value :: String }
type Table = [Row]
getClients = atTag "client" >>>
proc client -> do
name <- childText "name" -< client
info <- childText "info" -< client
table <- getTable <<< atTag "table" -< client
returnA -< Client name info table
where
atTag tag = isElem >>> hasName tag
atChildTag tag = getChildren >>> atTag tag
text = getChildren >>> getText
childText tag = atChildTag tag >>> text
getTable = atChildTag "row" >>>
proc row -> do
name <- childText "name" -< row
value <- childText "value" -< row
returnA -< Row name value
ただし、sのリストではなく、Row
から1つだけ返されるため、コンパイルされません。HXTを使用するのはこれが初めてなので、何か問題があることはわかっていますが、修正方法がわかりません。getTable
Row
どんな助けでも素晴らしいでしょう、ありがとう!