Personal tools

Xml

From HaskellWiki

Revision as of 01:39, 20 September 2013 by Nish2575 (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Text.XML.Light

Read the few [test cases]

Types: Content, Element, CData, Attr are all instances of typeclass Node

A Node instance is anything which has some convention for generating an Element out of it.

Useful notes: Content has constructors for Elem and Text. CData can be of kind CDataText. The type QName (qualified name) denotes a name with its qualifying namespace attached to it.

Snippets of essentials:

Constructing

let n = blank_name{qName = "td"} let n2 = unqual "td"

let d = blank_cdata{cdData = "some data here"}

blank_element {elName = n, elContent = [Text d]}

using node qn _, generally expands to node qn ([attrs], [content]), where it lifts any child data provided into a content list and ensures any attribute provided is lifted into an attribute list. unode just makes a name out of an unqualified name before calling node.

unode "td" () unode "td" $ Attr (unqual "width") "10" unode "td" $ "some data" unode "tr" [Elem $ unode "td" "some data", Text $ blank_cdata{cdData = "free text"}]


Input

parseXMLDoc "<tr><td>some data here</td></tr>"

parseXML "<car><color>red</color></car><car><color>orange</color></car>"



Output

showContent $ head $ parseXML "<car><color>black</color></car>"

ppContent $ head $ parseXML "<car><color>black</color></car>"


Searching

findChildren blank_name{qName="td"} $ fromJust $ parseXMLDoc "<tr><td>child1<td>inside</td></td><skip></skip><td>child2</td></tr>"

filterChildren (\e -> (qName $ elName e) == "skip") $ fromJust $ parseXMLDoc "<tr><td>child1<td>inside</td></td><skip></skip><td>child2</td></tr>"

findAttr (blank_name{qName = "width"}) $ fromJust $ parseXMLDoc "<tr width=10><td>child1<td>inside</td></td><skip></skip><td>child2</td></tr>"