5
我想從使用HXT的6行XML輸入中提取一些數據。我也想保留HXT,因爲Curl整合,因爲我有其他XML文件,後面有成千上萬行。從簡單的XML獲取數據
我的XML看起來是這樣的:
<?xml version = "1.0" encoding = "UTF-8"?>
<find>
<set_number>228461</set_number>
<no_records>000000008</no_records>
<no_entries>000000008</no_entries>
</find>
而且我一直試圖扎堆如何解析。不幸的是,HXT的Wiki頁面並沒有很大的幫助(或者我只是忽略了一些東西)。
data FindResult = FindResult {
resultSetNumber :: String,
resultNoRecords :: Int,
resultNoEntries :: Int
} deriving (Eq, Show)
resultParser :: ArrowXml a => a XmlTree FindResult
resultParser = hasName "find" >>> getChildren >>> proc x -> do
setNumber <- isElem >>> hasName "set_number" >>> getChildren >>> getText -< x
noRecords <- isElem >>> hasName "no_records" >>> getChildren >>> getText -< x
noEntries <- isElem >>> hasName "no_entries" >>> getChildren >>> getText -< x
returnA -< FindResult setNumber (read noRecords) (read noEntries)
find str = return . head =<< (runX $ readDocument [withValidate no, withCurl []] query >>> resultParser)
where query = "http://" ++ server ++ "/find?request=" ++ str
我總是得到的是
*** Exception: Prelude.head: empty list
所以,我想,解析必須去可怕的錯誤,因爲我檢查,並正確地獲得從查詢XML。
非常感謝您! – Lanbo