我想用xml-conduit
解析GPX文件。到目前为止,我有以下几点:如何使用Haskell的xml-conduit解析GPX文件?
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Data.Text as T
import Text.XML
import Text.XML.Cursor
data Trkpt = Trkpt {
trkptLat :: Text,
trkptLon :: Text,
trkptEle :: Text,
trkptTime :: Text
} deriving (Show)
trkptsFromFile path =
gpxTrkpts . fromDocument <$> Text.XML.readFile def path
gpxTrkpts =
child >=> element "{http://www.topografix.com/GPX/1/0}trk" >=>
child >=> element "{http://www.topografix.com/GPX/1/0}trkseg" >=>
child >=> element "{http://www.topografix.com/GPX/1/0}trkpt" >=>
child >=> \e -> do
let ele = T.concat $ element "{http://www.topografix.com/GPX/1/0}ele" e >>= descendant >>= content
let time = T.concat $ element "{http://www.topografix.com/GPX/1/0}time" e >>= descendant >>= content
let lat = T.concat $ attribute "lat" e
let lon = T.concat $ attribute "lon" e
return $ Trkpt lat lon ele time
样本GPX文件是here。
虽然原始的GPX文件数据都是有效的,但我得到了奇怪的结果,其中解析的文本大部分是空的,有一些零星的实际值。当有实际值时,它只在记录的其中一个字段中。
我很确定我没有正确使用xml-conduit
API。我究竟做错了什么?
就是这样。谢谢 :) – Ana