/
xml2json.hs
25 lines (24 loc) · 1011 Bytes
/
xml2json.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{-# LANGUAGE OverloadedStrings, TupleSections #-}
import System.Environment (getArgs)
import System.IO (stdin, stdout, openFile, IOMode(..), hFlush)
import System.Exit (exitSuccess)
import Control.Applicative
import Data.Conduit
import qualified Data.Conduit.Binary as C
import qualified Data.Conduit.List as C
import qualified Data.ByteString.Lazy.Char8 as L
import Data.Aeson (encode)
import Text.XML.ToJSON (tokensToJSON)
import Text.HTML.TagStream.Text (tokenStreamBS)
main :: IO ()
main = do
args <- getArgs
(hInput, hOutput) <- case args of
[] -> return (stdin, stdout)
[input] -> (,stdout) <$> openFile input ReadMode
[input, output] -> (,) <$> openFile input ReadMode
<*> openFile output WriteMode
_ -> putStrLn "xml2json [input] [output]" >> exitSuccess
tokens <- runResourceT $ C.sourceHandle hInput $= tokenStreamBS $$ C.consume
L.hPutStrLn hOutput $ encode $ tokensToJSON tokens
hFlush hOutput