我正在努力通过 xml-conduit 将响应从 http-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,但没有任何成功。
有没有人有任何提示可以指出我正确的方向?提前致谢。
尼尔