module Text.XML.HXT.DOM.XmlTreeFunctions
( module Text.XML.HXT.DOM.XmlTreeFunctions
, module Text.XML.HXT.DOM.ShowXml
)
where
import Text.XML.HXT.DOM.XmlTreeTypes
import Text.XML.HXT.DOM.XmlKeywords
import Text.XML.HXT.DOM.ShowXml
import Data.Maybe
isXCdataNode :: XNode -> Bool
isXCdataNode (XCdata _) = True
isXCdataNode _ = False
isXCharRefNode :: XNode -> Bool
isXCharRefNode (XCharRef _) = True
isXCharRefNode _ = False
isXCmtNode :: XNode -> Bool
isXCmtNode (XCmt _) = True
isXCmtNode _ = False
isXDTDNode :: XNode -> Bool
isXDTDNode (XDTD _ _) = True
isXDTDNode _ = False
isXAttrNode :: XNode -> Bool
isXAttrNode (XAttr _) = True
isXAttrNode _ = False
isXEntityRefNode :: XNode -> Bool
isXEntityRefNode (XEntityRef _) = True
isXEntityRefNode _ = False
isXErrorNode :: XNode -> Bool
isXErrorNode (XError _ _) = True
isXErrorNode _ = False
isXPiNode :: XNode -> Bool
isXPiNode (XPi _ _) = True
isXPiNode _ = False
isXTagNode :: XNode -> Bool
isXTagNode (XTag _ _) = True
isXTagNode _ = False
isXTextNode :: XNode -> Bool
isXTextNode (XText _) = True
isXTextNode _ = False
isRootNode :: XNode -> Bool
isRootNode = isTagNode t_root
isTagNode :: String -> XNode -> Bool
isTagNode n = isOfTagNode ((== n) . qualifiedName)
isOfTagNode :: (TagName -> Bool) -> XNode -> Bool
isOfTagNode p (XTag n _) = p n
isOfTagNode _ _ = False
isAttrNode :: String -> XNode -> Bool
isAttrNode n = isOfAttrNode ((== n) . qualifiedName)
isOfAttrNode :: (AttrName -> Bool) -> XNode -> Bool
isOfAttrNode p (XAttr n) = p n
isOfAttrNode _ _ = False
isTextNode :: String -> XNode -> Bool
isTextNode t = isOfTextNode (== t)
isOfTextNode :: (String -> Bool) -> XNode -> Bool
isOfTextNode p (XText t) = p t
isOfTextNode _ _ = False
isPiNode :: String -> XNode -> Bool
isPiNode n = isOfPiNode ((== n) . qualifiedName)
isOfPiNode :: (TagName -> Bool) -> XNode -> Bool
isOfPiNode p (XPi n _) = p n
isOfPiNode _ _ = False
isDTDElemNode :: DTDElem -> XNode -> Bool
isDTDElemNode e (XDTD n _) = n == e
isDTDElemNode _ _ = False
isErrorNode :: Int -> XNode -> Bool
isErrorNode l (XError l' _) = l == l'
isErrorNode _ _ = False
textOfXNode :: XNode -> String
textOfXNode (XText t) = t
textOfXNode _ = ""
mkXTagTree :: String -> XmlTrees -> XmlTrees -> XmlTree
mkXTagTree n al cs = mkNode (XTag (mkName n) al) cs
mkQTagTree :: QName -> XmlTrees -> XmlTrees -> XmlTree
mkQTagTree q al cs = mkNode (XTag q al) cs
mkXNsTagTree :: String -> String -> XmlTrees -> XmlTrees -> XmlTree
mkXNsTagTree n ns al cs = mkNode (XTag (mkNsName n ns) al) cs
newRoot :: XmlTrees -> XmlTree
newRoot al = mkXTagTree t_root al []
emptyRoot :: XmlTree
emptyRoot = newRoot []
newDocument :: String -> XmlTree
newDocument n
= newDocument' [(a_source, n), (a_status, show c_ok)]
newDocument' :: Attributes -> XmlTree
newDocument' al
= newRoot (fromAttrl al)
mkRootTree :: XmlTrees -> XmlTrees -> XmlTree
mkRootTree al cs = mkXTagTree t_root al cs
mkXTextTree :: String -> XmlTree
mkXTextTree s = mkLeaf (XText s)
mkXCharRefTree :: Int -> XmlTree
mkXCharRefTree s = mkLeaf (XCharRef s)
mkXEntityRefTree :: String -> XmlTree
mkXEntityRefTree s = mkLeaf (XEntityRef s)
mkXCmtTree :: String -> XmlTree
mkXCmtTree c = mkLeaf (XCmt c)
mkXDTDTree :: DTDElem -> Attributes -> XmlTrees -> XmlTree
mkXDTDTree d al ds = mkNode (XDTD d al) ds
mkXAttrTree :: String -> XmlTrees -> XmlTree
mkXAttrTree an av = mkNode (XAttr (mkName an)) av
mkQAttrTree :: QName -> XmlTrees -> XmlTree
mkQAttrTree aq av = mkNode (XAttr aq) av
mkXNsAttrTree :: String -> String -> XmlTrees -> XmlTree
mkXNsAttrTree an ns av = mkNode (XAttr (mkNsName an ns)) av
mkXPERefTree :: String -> XmlTree
mkXPERefTree ref = mkLeaf (XDTD PEREF [(a_peref, ref)])
mkXPiTree :: String -> String -> XmlTree
mkXPiTree n str = mkLeaf (XPi (mkName n) (xattr a_value str))
mkXmlDeclTree :: XmlTrees -> XmlTree
mkXmlDeclTree al = mkLeaf (XPi (mkName t_xml) al)
mkXCdataTree :: String -> XmlTree
mkXCdataTree s = mkLeaf (XCdata s)
mkXErrorTree :: Int -> String -> XmlTrees -> XmlTree
mkXErrorTree l s cs = mkNode (XError l s) cs
maybeString2XText :: Maybe String -> XmlTrees
maybeString2XText = map mkXTextTree . maybeToList
showXText :: XmlTrees -> String
showXText
= concatMap showT
where
showT (NTree (XText t) _) = t
showT _ = ""
showXCharRef :: XmlTrees -> String
showXCharRef
= concatMap showT
where
showT (NTree (XCharRef r) _) = "&#" ++ show r ++ ";"
showT _ = ""
showXEntityRef :: XmlTrees -> String
showXEntityRef
= concatMap showT
where
showT (NTree (XEntityRef r) _) = "&" ++ r ++ ";"
showT _ = ""
showXErrors :: XmlTrees -> String
showXErrors
= concatMap showE
where
showE (NTree (XError level str) _) = msg level ++ ": " ++ str ++ "\n"
showE _ = ""
msg :: Int -> String
msg l
| l == c_warn = "Warning"
| l == c_err = "Error"
| otherwise = "Fatal error"
xmlTreesToString :: XmlTrees -> String
xmlTreesToString = xshow
xmlTreesToText :: XmlSFilter
xmlTreesToText ts@[(NTree (XText _) _)] = ts
xmlTreesToText ts@[] = ts
xmlTreesToText ts = xtext . xshow $ ts
xmlContentModelToString :: XmlTree -> String
xmlContentModelToString (NTree (XDTD ELEMENT al) cs)
= showElemType (lookup1 a_type al) cs ""
xmlContentModelToString _
= ""
nameOf :: XmlTree -> String
nameOf
= selName . getNode
where
selName (XTag n _) = qualifiedName n
selName (XAttr n ) = qualifiedName n
selName (XPi n _) = qualifiedName n
selName _ = ""
localPartOf :: XmlTree -> String
localPartOf
= selName . getNode
where
selName (XTag n _) = localPart n
selName (XAttr n ) = localPart n
selName (XPi n _) = qualifiedName n
selName _ = ""
namespaceOf :: XmlTree -> String
namespaceOf
= selName . getNode
where
selName (XTag n _) = namespaceUri n
selName (XAttr n ) = namespaceUri n
selName _ = ""
prefixOf :: XmlTree -> String
prefixOf
= selName . getNode
where
selName (XTag n _) = namePrefix n
selName (XAttr n ) = namePrefix n
selName _ = ""
universalNameOf :: XmlTree -> String
universalNameOf
= selName . getNode
where
selName (XTag n _) = universalName n
selName (XAttr n ) = universalName n
selName _ = ""
attrlOfDTD :: XmlTree -> Attributes
attrlOfDTD (NTree (XDTD _ al) _) = al
attrlOfDTD _ = []
valueOfDTD :: String -> XmlTree -> String
valueOfDTD n = lookup1 n . attrlOfDTD
ofDTDequals :: String -> String -> XmlTree -> Bool
ofDTDequals n v = (== v) . valueOfDTD n
xcmt :: String -> XmlTrees
xcmt cmt = [ mkXCmtTree cmt ]
xerr :: String -> XmlTrees
xerr msg = [ mkXErrorTree c_err msg []]
xwarn :: String -> XmlTrees
xwarn msg = [ mkXErrorTree c_warn msg []]
xtext :: String -> XmlTrees
xtext t = [ mkXTextTree t]
xtag :: String -> XmlTrees -> XmlTrees -> XmlTrees
xtag t al cl = [ mkXTagTree t al cl ]
xattr :: String -> String -> XmlTrees
xattr n v = [ mkXAttrTree n (xtext v) ]
toTreel :: XmlTrees -> AssocList String XmlTrees
toTreel
= concatMap toTree
where
toTree (NTree (XAttr n) cs) = [(qualifiedName n, cs)]
toTree _ = []
toAttrl :: XmlTrees -> Attributes
toAttrl
= map (\ (k,tl) -> (k, xshow tl)) . toTreel
fromTreel :: AssocList String XmlTrees -> XmlTrees
fromTreel
= map (\ (k,tl) -> mkXAttrTree k tl)
fromAttrl :: Attributes -> XmlTrees
fromAttrl
= fromTreel . map (\ (k,v) -> (k, xtext v))