我正在努力通过xml-conduit将http-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
我试过使用$ =和$$连接Source从http-conduit到xml-conduit,但我没有任何成功。
有没有人有任何提示指向我在正确的方向?提前致谢。
尼尔
这工作,稍作调整。我不得不在sinkDoc:'body $$ sinkDoc def'之后添加默认分析设置非常感谢! – Neil 2012-02-12 02:57:13