【发布时间】:2015-11-01 01:54:27
【问题描述】:
我想使用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。我做错了什么?
【问题讨论】: