tagsoup-0.13.3: Parsing and extracting information from (possibly malformed) HTML/XML documents

Safe Haskell | Safe-Inferred
Language | Haskell98

Text.HTML.TagSoup.Tree

Description

NOTE: This module is preliminary and may change at a future date.

This module is intended to help converting a list of tags into a tree of tags.

Synopsis

- data TagTree str
  - = TagBranch str [Attribute str] [TagTree str]
  - | TagLeaf (Tag str)
- tagTree :: Eq str => [Tag str] -> [TagTree str]
- flattenTree :: [TagTree str] -> [Tag str]
- transformTree :: (TagTree str -> [TagTree str]) -> [TagTree str] -> [TagTree str]
- universeTree :: [TagTree str] -> [TagTree str]

# Documentation

data TagTree str

Constructors

TagBranch str [Attribute str] [TagTree str] |
TagLeaf (Tag str) |

Instances

Functor TagTree |
Eq str => Eq (TagTree str) |
Ord str => Ord (TagTree str) |
Show str => Show (TagTree str) |

tagTree :: Eq str => [Tag str] -> [TagTree str]

Convert a list of tags into a tree. This version is not lazy at all, that is saved for version 2.

flattenTree :: [TagTree str] -> [Tag str]

transformTree :: (TagTree str -> [TagTree str]) -> [TagTree str] -> [TagTree str]

This operation is based on the Uniplate `transform` function. Given a list of trees, it applies the function to every tree in a bottom-up manner. This operation is useful for manipulating a tree - for example to make all tag names upper case:

    upperCase = transformTree f
      where f (TagBranch name atts inner) = [TagBranch (map toUpper name) atts inner]
            f x = [x]

universeTree :: [TagTree str] -> [TagTree str]

This operation is based on the Uniplate `universe` function. Given a list of trees, it returns those trees, and all the children trees at any level. For example:

    universeTree
       [TagBranch "a" [("href","url")] [TagBranch "b" [] [TagLeaf (TagText "text")]]]
    == [TagBranch "a" [("href","url")] [TagBranch "b" [] [TagLeaf (TagText "text")]]]
       ,TagBranch "b" [] [TagLeaf (TagText "text")]]

This operation is particularly useful for queries. To collect all `"a"` tags in a tree, simply do:

    [x | x@(TagBranch "a" _ _) <- universeTree tree]