Upcoming SlideShare
×

# Xpath in-lens

3,684 views

Published on

Lens&Prism勉強会 http://connpass.com/event/13929/ の発表資料

Published in: Technology
8 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

Views
Total views
3,684
On SlideShare
0
From Embeds
0
Number of Embeds
979
Actions
Shares
0
7
0
Likes
8
Embeds 0
No embeds

No notes for slide

### Xpath in-lens

1. 1. XPcJ’rh in Lens ElElEF'§i: r (@’rcinc1l<h)
2. 2. E Eriﬁfi‘ ° BEIEP ii‘? (@’rc1nc1|<h) - Hos| <e| |’rY>:3‘C\$§’ ~ Lens¥EL/ §"? ‘:i“C3l’)73‘lOE’e“/ ia ° C? ZODZl57Z: DOD%%'% 3:? ) L; <a"5lFaEbL/ &"§'! -ac: Haskell ’‘= <? “!? ?-’ mm. .. W iiiiii: I I » 9:22 , xi _ ' ‘_l‘: I=iK(= l»_It iiiﬁlidiiif ~; ;E:1,—, ,=<_ ,2‘
3. 3. l ( o('-_ l l ( Iviolivoling Example -‘). oO(llF§7‘: “fa2Zl73.. .) -‘ . oO(EzoeEE/ ult M ’C“t3§‘§73‘. ..) -‘ . oO(. ..) -‘ . oO(. ..) ) ) - ’-_-‘). oO(EF= ﬁ©‘é7E&3i:7‘5'7b°i: ii§§)J©*§0)‘e7;t2l5.. .) ' ) l -‘ . oO(CL|13"5i’2“iE§"§’i‘3’3i’F§73‘. ..)
4. 4. . 'C'355’V‘<§T. f. http: ./, /ask. fm/ EzoeRyou. /answer/ l275i 7834839 lltﬁl/ '55 U)'Ci’D)‘J“57ZiL M, ht’tr>: /./ ,asl«. .fm/ EzoeRy0u/ ariswer/ l275i 8042455 7!‘/ H3 5e‘, foTIi; I«2l ‘O ht to : /i-"ask .1‘m/ EzoeRyou/ answer/12754i85U775
6. 6. Rss0)77r—7y| (: Lﬁ_é’i) ° / rss/ channel/ ilem (C7/i’7_-A0)—%§b“5§'5 L/ L - / rss/ Channel/ ilem/ ’ri’r| e 73“@’i’ | )| / (As| <0Di%i’Ei’, iF'= -3) ~ / rss/ channel/ ilem/ descriplion 73“2lS§Z (Asl<0Di%élE| §) - / rss/ channel/ ilem/ link DVURL BL/ l,o )Oo. ('—_—‘)El’J'7iJ3‘J. ..
7. 7. XML access in Haskell import Text. XML as XML xml-- conduit findElement : : Element —> Name —> [Element] findElement e name = [ c I NodeElement c <- elementNodes e , e1ementName c = = name ] getcontent : : Element -> Text getcontent e = mconcat [ c I Nodecontent c <- elementNodes e ] main : : IO () main = do doc <— XML . readFile def "EzoeRyou. rss" r'ssPr‘int doc
8. 8. 33% rssPrint : 2 Document —> I0 () rssPrint doc = do let root = documentRoot doc items = do chan <— findElement root "channel" -FindElement chan "item" -ForM_ items \$ ¥item -> do T. putStrLn \$ mconcat \$ map getcontent \$ findElement item "link" T. putStrLn \$ mconcat :5 map getcontent \$ findElement item "title" T. putStrLn \$ mconcat \$ map getcontent \$ -FindElement item "description" putStrLn ""
9. 9. do/ ué: “< Em! -ADTiEi§2mL‘)§0)iah s”€I3f: %E&>/ utwi -*l%lC 7r~7lL/ t§’r‘3Dé:73 ﬁ'l%L/ ‘C5’r‘3’Jc‘:73 ('-_-‘) lSYB Unipla’re? ﬂ7Zf%3l’LlE, to : /ur‘— ieo_t57riabx, lei: JavaScr'pllZl; =v'<5%“ ! J Text. XML DOM—based parsing and rendering. This module requires that all entities be resolved at parsing. If you need recommended module for most uses cases. While many of the clatatypes in this module are simply reexpoited from possibility of unresolved entities. Conversion functions are provided to s For simpler, bidirectional traversal of the DOM tree, see the Text Xr~’lL Cu Data types Us la Document Constructors Document docuiiientlhclague : : Prologue documentRoot : : Element documentEpi1ague : : [Miscellaneous] . », Insta nccs data Prologue . ~ x Constructors Prologue prologuenefore : : [Miscellaneous]
10. 10. Text. XML. Cursor - XPalh5/1”? ??/ i’ ‘/9-7:: —X*635ZalClata‘5§(xm| —conduil) import Text. XML. Cursor -- also in xml-conduit rssCursor : : Document -> IO () rssCursor doc = do let items = fromDocument doc & (element "rss" &/ element "channel" &/ element " item") -ForM_ items \$ ¥item —> do T. putStrLn \$ mconcat 35 item 519/ element "link" &/ content T. putStrLn \$ mconcat \$ item 515/ element "title" &/ content T. putStrLn \$ mconcat 55 item \$/ element "description" &/ content putStrLn "" (&) = flip (\$) (GHC—7.lO 73“5baselC§)K)
11. 11. L;73‘L/ ... - L75L‘5/ i‘J’7—‘/ “t‘_"‘6:0D’7I U §§E7a': %‘. i§0)lat IE‘ieL/ /utmo ('-_-‘) lZ/ u722§§El§‘3‘C§? l’l§73‘o l§l: tJavaScrip’rlCl7='<% ! J
12. 12. HaskelllZl: £Lens73“3537': ! import Text. XML. Lens —— xml—lens rssLens : : Document —> 10 () rssLens doc = forM_ (doc". . root . el"rss" . /el"channel" . /el"item") \$ ¥item -> do T. putStrLn 55 item“. plate. el"link" . text T. putStrLn 513 item“. plate. el"title" . text T. putStrLn 51% item“. plate. el"description" . text putStrLn ""
13. 13. XIviL0D70t7lZLens7ii§'5 cEl9ii5F'J ! ~ Lens7;t'5 %l\$ECDOI'JDSLctl2tiED’C ° lE<§l]‘5l’l. 'C l’_I'. '<l§l’)l’l_Cl/ § ° 7?*_‘73“5 :77‘/ u7“a‘~LensE§l]’J_Cl/ 5 -7?i73‘5 5'7‘/ u72tLens‘&Fa'El\$lClE’5_ct73“"C‘§Zo ° 5'7‘/ u7JLens7‘&l§iZ>0D—(: ' ¥li7Z‘_lC%i§? _’. &73“’}‘7'a3<_C5§i: ‘ I, ° u ' ‘I J
14. 14. 7cLfCLens‘}E/ --- ruin. nu--in . ... a F. ... ... ... F.. ... ,. . . (ll-rbi->(I->1!)-islluuun Contro| .Lens. internal. Magma mnw-u iimuiusnaii-iiiaian roiumvov Mmaar->FoIuu->(I- ->1-n loiar0i*Fo1d —‘Vl~>r~>I- InLi| lOi Fou III -nyoi mac: B091)»: ->80-1| manor, lbﬁﬁzllvlll-FoId| l—>(n—vlvI->1-= l[) Contro| .Lens. lnternal. Prism Mm“_"m¢_W ControI. Lens. |nternal. PrismTH : .'. "i5ili’1.‘: .'. .‘s’¥. ‘.. ?". 'm'. \$2»". ;'é‘“n“. ’3:; §":1'. ';. ”' 2‘-3‘? u. "“'. :§"“. ;.. :.”. :’s. ..""'. '.'. '.. ".". .‘: ’:': i”’ ""_ Control Lens. Interna I . Reflection Control. Lens. lnternal. Review Control. Lens. Internatsetier Control. Lens. |nterna| .TH our vunmi-in to lI~>I]->GoImu u. ».. ... r.. m.u. i-»mm. iiv-inn)-n Con[ro| _Len3_| n[ernaI_Zoom , ‘ ﬁwgsﬁ 35 35 35 "" ‘ ‘ H-'- #343 £'. ... ... .. ol. 5. -i--anon-~rmn-nun. » mrmonni-inn? i: :;2:'--"-i. ..s. .'-: ;r. .:-. ..: ;:. ~.: ::; :': ::. ::: :.. ... .,i. m, Control-Lens-Level Control. Lens. Operators . .i. .a l-invun ___‘__ W (_A__)wmm Contro| .Lens. Plated ‘-‘"-, Fg; ;I‘-_'_g-_; '_'= _;‘*. 'g; '_| ;'i--'-° m G: : llnhamI Contro| .Lens. Prism :2 F-«nun-rtomni-n """' '"°"“’”"""" "'°""" . I r. '.i; f“i‘. '31“"Zlt'. '.. §I. '.'l. ii. ... (.. ... i.. ..i "‘ "" Comro| 'Lens'Re| ﬁed T ramm- P/ Film: """'*'°"""'“-°"*"°" "W"-" Control Lens Review n-iuuvmam. ,iu. »ini-». .>ii W. .. , (.. ,., _.[. ..g. ... ... ,_. p,. .,. .,. .., ' ' (‘I-‘Ar-)‘ 1->| .nnninn.2lI. ~iI). >n. vri (5659-)11MonlﬂllﬂINI->l. IIlIID~P(l-'l'. l)l""" : \$;vP, w;_<3;«‘; .v: ;i_<)E(rEv; r_gEcih; _>_ Control, Lens. Setter 7-E ConlroI. Lens. TH _M__’ I _ m_'j: ;"° Contro| .Lens. Traversa| Contro| .Lens. Tuple -um : smu-nu. mnoinn Timmy! ->noIlIb. vholVI)lli)llINlDl Pnnfrnl I one Tuna
15. 15. LX I3?-iiEE
16. 16. XPa’rh &Lens0D3blﬁi‘3l§U Iicllk rooi. el"hoge" rool. enlire. el”hoge" el”hoge". plale. el”hage” el”hoge". ..e| ”hage” e| ”hoge". /e| "hage" (T:3iat~>J: zs) el"hoge”. enlire. el"nage" el”hoge". nodes el”hoge”. p|ale. plaie. e|"hage” indexing (el “hoge") . indexO indexing (el”hoge") . indices(<2) I ‘C"oIii sill? / hoge l*‘= l=: L>4> l)l/ — l0D<hoge> / /hoge l*‘= l‘—: L>4> F3‘/ ‘"COD<hoge> hoge/ hage <hoge>(DIEi§0D¥§§‘C‘35§ <hage> hoge/ /nage <hoge>0D§'/ ‘“C¥5‘, %J — | *‘lC35 §<hage> hoge/ * <hoge>CD¥§§E§‘/ “C hoge/ */hage <hoge>0)¥%§§’E‘C‘i5§<hage> hoge[i] l§EOD<hoge> hoge[posilion() <3] <hoge>0D5'E§E2§§E \$7E§7'i‘l’)l'l03i’)7J"57Eil, 0D73“7': < F. “/uZl5ZaE'>*T: l,
17. 17. &Z5—C‘CSSt I/0’>"— tl, 50D73“@§ ° CSS—C‘Hll/ lL0DDOl/ l03§§'%7<7:: L5§§J‘R3_c7D7:l: U Egg - JavaScrip’r73"5DOM0D§§Ei%l‘R7J”§0DlC‘6i§l’)l’l_Cl/ § ° Z T) "50Dli573“3El/ A'§'lJL73“E73". D 7T:73"5 Lx? l’U'd§l, (' -_- ‘) . oO(%‘i-3%”t3l¥EXPain722/u"C§| ]'5/uibo 3E%i’9 bl
18. 18. csst i/ J/si—. c:0>sdri~: l'iIJ Itcllk eniire aiiribuiels “class” “klass” e| ”p". ailribulels “class” “klass" aiiribuiels “id" “hoge" el”E". eniire. el”F” el”E". /e| "F” e| ”E". aiiribuiesalisfies”hoge”(consi True) e| ”E". aiiribuiels”hoge’"’hage" el”E". aiiribulesaiisfies "hoge” l“hage" ‘isPrefixOf‘) lndexing(el”p") . index 0 lndexinglel"p") . indexl indexing (el"p") . indices odd f£\$’1i4nI1o“— * . klass p. klass #hoge E F E > F E[hoge] E[hoge= “hage"] E[noge/ =“hage"] p: firsl—child p: n’rh—of—’rype( 2) p: nlh—of—lype(2n+l ) P. -.', '.. ' . a -9"/ ‘—CODE§’= E klass tb505XEi%D§§ klass t L 5 05X’&l%'3pE§? hoge&l, '5lD4‘EiEi%D§§ E03¥}«¥t03F EODIETUDF hogeFa'| E"&i§’_DEE§ nogeF: a'| \$lZhagecEl, 5iIE"&i\$ DEE? l'iage’C‘ll’: 'i‘EE~lIE7‘&i%’_D II sE'§i*}J0Dp§§ 2§EODpE§ ﬁrﬁﬁlﬁﬁ 0DpE§
19. 19. l‘9IJ : @l§tURL7a‘: i7§é‘tl: l’9” doc <- HTML . parseLBS <\$> simpleHttp "http: //www. gochiusa. com/ " mapM_ T. putStrLn \$ doc“. . root. entire. el"img" . attr"src” = > :5 runhaskell main. hs core_sys/ images/ main/ top/ pv_bt. png core_sys/ images/ main/ logo. png core_sys/ images/ main/ gnavi/ gnavi_ti. gif core_sys/ images/ main/ top/ gochi_cd0424_banner. jpg
20. 20. JSONcE73‘lZE ~ JSONOD3-“—’9ﬁ\$7l‘ﬁ‘9“Z>0)lZi-3Lensbiliié F aeson—lensd: l,5l¥73“i’l5D7Z: /i‘y? '—§c‘: “ “ lens—aesoncEl, 5ekme’rilZal: Zo/ ‘y’§'—‘)73‘35Zo73 aeson—lensl: il¥13“‘Tsi"l’ED’C7El7‘€ >4‘/7:7"/ XL/ —C7EJ? l/7l"j: | D} “J’7'—: /“7'd:03_C IJZTekmei”rlZ<J: Zalens—aeson7a2l§5 Z & l
21. 21. l§lJ : “J’i"‘J’>"’—0D’9’i’A5’i’> doc <- decode <\$> L. readFile "timeline. json" ForM_ (doc". ._Just. nonNull. _Array. traverse) \$ ¥tweet -> do T. putStrLn \$ tweet". key"user"'. key"screen_name". _String T. putStrLn \$ tweet". key"text". _String
22. 22. Ebb - Lenslztillﬁéliifllltliié '* 3i’~X lL/7I“_71‘—’>"lC77tX3"c7o0Dli’95 libﬁ ~ c7>*72i‘c‘T/ uLens‘C‘77"J E/ ucf/ ui’FD E b3: 5