http-conduitからxml-conduitを介して応答をXMLドキュメントに変換するのに苦労しています。
この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-conduitを使用して応答本文を解析しようとすると、次の問題が発生します。
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にソースを接続しようとしましたが、成功しません。
誰かが私を正しい方向に向けるためのヒントがありますか?前もって感謝します。
ニール