http-conduitからの応答をxml-conduit経由でXML文書に変換しようとしています。http-conduitをxml-conduitに接続
doPost
関数は、XMLドキュメントを取得してサーバーに送信します。サーバーはXML文書で応答します。
doPost queryDoc = do
runResourceT $ do
manager <- liftIO $ newManager def
req <- liftIO $ parseUrl hostname
let req2 = req
{ method = H.methodPost
, requestHeaders = [(CI.mk $ fromString "Content-Type", fromString "text/xml" :: Ascii) :: Header]
, redirectCount = 0
, checkStatus = \_ _ -> Nothing
, requestBody = RequestBodyLBS $ (renderLBS def queryDoc)
}
res <- http req2 manager
return $ res
以下の作品とリターン200 '':
let pingdoc = Document (Prologue [] Nothing []) (Element "SYSTEM" [] []) []
Response status headers body <- doPost pingdoc
return (H.statusCode status)
私がしようとxml-コンジットを使用して応答本体を解析する場合しかし、私は問題に実行:
Response status headers body <- doPost xmldoc
let xmlRes' = parseLBS def body
結果のコンパイルエラーは次のようになります。
Couldn't match expected type `L.ByteString'
with actual type `Source m0 ByteString'
In the second argument of `parseLBS', namely `body'
In the expression: parseLBS def body
In an equation for `xmlRes'': xmlRes' = parseLBS def body
$ =と$$を使ってhttp-conduitからxml-conduitにSourceを接続しようとしましたが、何の成功もありません。
私に正しい方向を指すヒントはありますか?前もって感謝します。
ニール
マイナーな調整でうまくいきました。私はsinkDocの後にデフォルトの解析設定を追加しなければなりません: 'body $$ sinkDoc def'ありがとう! – Neil