我正在努力通過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