git.iko.soy/typeable/xml-lens
on master help sign in
50 lines 1.6 kB history raw
1xml-lens
2========
4Lenses and traversals for [xml-conduit](http://hackage.haskell.org/package/xml-conduit).
6Example
7========
9```haskell
10> doc <- Text.XML.readFile def "examples/books.xml"
12> doc ^.. root . named "books" ... named "book" . attributeIs "category" "Textbooks" ... named "title" . text
13["Learn You a Haskell for Great Good!","Programming in Haskell","Real World Haskell"]
15> lengthOf ?? doc $ root . named "books" ... named "book"
18> doc ^? root . named "books" ... attributeIs "category" "Joke" ... named "title" . text
19Just "Functional Ikamusume"
21> doc & root . named "books" ... named "book" ... named "pages" . text <>~ " pages" & renderLBS def & BL.putStrLn
22```
24```xml
25<?xml version="1.0" encoding="ISO-8859-1"?>
26<books>
27<book category="Language and library definition">
28 <title>Haskell 98 language and libraries: the Revised Report</title>
29 <author year="2003">Simon Peyton Jones</author>
30 <pages>272 pages</pages>
31 <price>£45.00</price>
32</book>
33<book category="Textbooks">
34 <title>Learn You a Haskell for Great Good!</title>
35 <author year="2011">Miran Lipovaca</author>
36 <pages>360 pages</pages>
37</book>
38<book category="Textbooks">
39 <title>Programming in Haskell</title>
40 <author year="2007">Graham Hutton</author>
41 <pages>200 pages</pages>
42</book>
43…
44```
46Tips
47----
49* Use [cosmos](http://hackage.haskell.org/package/lens-4.19.2/docs/Control-Lens-Plated.html) to traverse over all children
50* You can do or-composition of traversals with [failing](http://hackage.haskell.org/package/lens-4.19.2/docs/Control-Lens-Traversal.html#v:failing)