Estoy tratando de extraer algunos datos de una entrada XML con 6 líneas, usando HXT. También quiero mantener HXT, debido a la integración de Curl y porque tengo otros archivos XML con miles de líneas, más adelante.Obtener datos de un XML simple
Mi XML tiene el siguiente aspecto:
<?xml version = "1.0" encoding = "UTF-8"?>
<find>
<set_number>228461</set_number>
<no_records>000000008</no_records>
<no_entries>000000008</no_entries>
</find>
Y he estado tratando de conseguir juntos cómo procesarla. Desafortunadamente, la página Wiki de HXT no ha sido de gran ayuda (o simplemente pasé por alto cosas).
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
Lo que siempre consigo es
*** Exception: Prelude.head: empty list
así, supongo, el análisis debe ir muy mal, ya que he comprobado correctamente y obtener el código XML de la consulta.
Muchas gracias a usted! – Lanbo