{-# LANGUAGE OverloadedStrings #-}
module Namespaces where
import Control.Lens -- lens
import Data.String (IsString(..)) -- base
import Data.Text (Text) -- text
import Text.Printf (printf) -- base
import Text.Xml.Lens -- xml-html-conduit-lens
-- $setup
-- >>> :set -XOverloadedStrings
-- >>> import Text.Xml.Lens
-- >>> import qualified Data.Text.Lazy.IO as Text
-- >>> doc <- Text.readFile "example/namespaces.xml"
-- | Fire pokemons
--
-- >>> toListOf fire doc
-- ["charmander","vulpix"]
fire :: AsXmlDocument t => Traversal' t Text
fire =
xml.node (pokemon "list")
.plate
.attributed (ix (pokemon "type").only "fire")
.attr (pokemon "name")
.traverse
-- | Soviet communists
--
-- >>> toListOf soviet doc
-- ["Alexandra Kollantai","Nadezhda Krupskaya"]
soviet :: AsXmlDocument t => Traversal' t Text
soviet =
xml.node (communist "list")
.plate
.attributed (ix (communist "nationality").only "Soviet")
.attr (communist "name")
.traverse
pokemon :: IsString str => String -> str
pokemon =
ns "http://pokemon.example.com"
communist :: IsString str => String -> str
communist =
ns "http://communist.example.com"
ns :: IsString str => String -> String -> str
ns url =
fromString . printf "{%s}%s" url