से डेटा प्राप्त करना मैं एचएफटी का उपयोग करते हुए 6 लाइनों के साथ एक एक्सएमएल इनपुट से कुछ डेटा निकालने का प्रयास कर रहा हूं। मैं कर्ल एकीकरण के कारण भी एचएफटी रखना चाहता हूं और क्योंकि मेरे पास अन्य एक्सएमएल फाइलें हैं जो बाद में हजारों लाइनों के साथ हैं।एक साधारण एक्सएमएल
मेरे एक्सएमएल इस तरह दिखता है:
<?xml version = "1.0" encoding = "UTF-8"?>
<find>
<set_number>228461</set_number>
<no_records>000000008</no_records>
<no_entries>000000008</no_entries>
</find>
और मैं एक साथ पाने के लिए है कि पार्स करने के लिए कैसे की कोशिश कर रहा हूँ। दुर्भाग्यवश, एचएफटी का विकी पेज एक बड़ी मदद नहीं रहा है (या मैंने अभी सामानों को नजरअंदाज कर दिया है)।
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
क्या मैं हमेशा पाने के बाद से मैं जाँच की तो, मुझे लगता है, पार्स बहुत गलत हो जाना चाहिए, और सही ढंग से क्वेरी से XML मिल
*** Exception: Prelude.head: empty list
है।
आप के लिए बहुत-बहुत धन्यवाद! – Lanbo