#phpbcat




FluentDOM
 Thomas Weinert
About Me

●   Application Developer
    ●   PHP
    ●   JavaScript
    ●   XSL
●   Papaya Software GmbH
    ●   papaya CMS
    ●   Technical Director
About You?
About FluentDOM

●   JQuery API
●   DOMNodeList replacement
●   Learning Project
    ●   Test driven development
    ●   Continous Integration
    ●   Parser
●   Tobias Schlitt
●   Bastian Feder, Thomas Weinert
Differences To jQuery

●   „Only“ Traversing, Manipulation and some Core
    functions
●   Xpath Expressions (not CSS Selectors)
●   No method html() but xml()
●   Callbacks have a $node parameter
Chaining

●   Methods return objects
Chaining Sample


$fd = FluentDOM($html, 'html')
  ->find('/html/head/title')
  ->add('//h1')
  ->add('//h2');
Traversing

●   find()      ●   children()       ●   first()
●   add()       ●   closest()        ●   last()
●   not()       ●   contents()       ●   prev()
●   filter()    ●   parent()         ●   prevAll()
●   has()       ●   parents()        ●   prevUntil()
●   end()       ●   parentsUntil()   ●   next()
●   andSelf()   ●   siblings()       ●   nextAll()
                                     ●   nextUntil()
Xpath

●   XML Path Language
●   W3C Recommendation 16 November 1999
●   Used by
    ●   XSLT 1
    ●   Xpointer
●   More specific then CSS
●   More powerful then CSS
Namespaces

●   Xpath depends on namespaces
●   Register your own namespaces prefixes
●   Method: namespaces()

$title = FluentDOM($xml)
  ->namespaces(
     array('project-atom' => 'http://www.w3.org/2005/Atom')
  )
  ->evaluate(
     'string(/project-atom:feed/project-atom:title)'
  );
Interfaces

●   IteratorAggregate
    ●   Iterator
    ●   RecursiveIterator
    ●   Seekable
●   Countable
●   ArrayAccess (read only)
Functions

●   Create FluentDOM object and load data
    ●   FluentDOM
    ●   FluentDOMStyle
Manipulation

●   append()        ●   appendTo()      ●   xml()
●   prepend()       ●   prependTo()     ●   text()
●   before()        ●   insertAfter()   ●   attr()
●   after()         ●   insertBefore() ● addClass()
●   remove()        ●   wrap()          ●   removeClass()
●   replaceAll()    ●   wrapAll()       ●   toggleClass()
●   replaceWith()   ●   wrapInner()
Loaders

●   Default Loaders
    ●   DOMDocument, DOMNode
    ●   XML (file and string)
    ●   HTML (file and string)
●   Additional Loaders
    ●   SimpleXMLElement
    ●   PDO
    ●   JSON
Own Loaders

●   Interface FluentDOMLoader
    ●   load() returns DOMDocument or DOMNode
Extending FluentDOM

●   FluentDOMCore
    ●   spawn()
    ●   push()
    ●   unique()
    ●   _applyContentsToNodes()
Future

●   CSS Selectors
●   ?
Get It

●   http://fluentdom.org
●   http://nightly.fluentdom.org
●   svn://svn.fluentdom.org

FluentDom

  • 1.
  • 2.
    About Me ● Application Developer ● PHP ● JavaScript ● XSL ● Papaya Software GmbH ● papaya CMS ● Technical Director
  • 3.
  • 4.
    About FluentDOM ● JQuery API ● DOMNodeList replacement ● Learning Project ● Test driven development ● Continous Integration ● Parser ● Tobias Schlitt ● Bastian Feder, Thomas Weinert
  • 5.
    Differences To jQuery ● „Only“ Traversing, Manipulation and some Core functions ● Xpath Expressions (not CSS Selectors) ● No method html() but xml() ● Callbacks have a $node parameter
  • 6.
    Chaining ● Methods return objects
  • 7.
    Chaining Sample $fd =FluentDOM($html, 'html') ->find('/html/head/title') ->add('//h1') ->add('//h2');
  • 8.
    Traversing ● find() ● children() ● first() ● add() ● closest() ● last() ● not() ● contents() ● prev() ● filter() ● parent() ● prevAll() ● has() ● parents() ● prevUntil() ● end() ● parentsUntil() ● next() ● andSelf() ● siblings() ● nextAll() ● nextUntil()
  • 9.
    Xpath ● XML Path Language ● W3C Recommendation 16 November 1999 ● Used by ● XSLT 1 ● Xpointer ● More specific then CSS ● More powerful then CSS
  • 10.
    Namespaces ● Xpath depends on namespaces ● Register your own namespaces prefixes ● Method: namespaces() $title = FluentDOM($xml) ->namespaces( array('project-atom' => 'http://www.w3.org/2005/Atom') ) ->evaluate( 'string(/project-atom:feed/project-atom:title)' );
  • 11.
    Interfaces ● IteratorAggregate ● Iterator ● RecursiveIterator ● Seekable ● Countable ● ArrayAccess (read only)
  • 12.
    Functions ● Create FluentDOM object and load data ● FluentDOM ● FluentDOMStyle
  • 13.
    Manipulation ● append() ● appendTo() ● xml() ● prepend() ● prependTo() ● text() ● before() ● insertAfter() ● attr() ● after() ● insertBefore() ● addClass() ● remove() ● wrap() ● removeClass() ● replaceAll() ● wrapAll() ● toggleClass() ● replaceWith() ● wrapInner()
  • 14.
    Loaders ● Default Loaders ● DOMDocument, DOMNode ● XML (file and string) ● HTML (file and string) ● Additional Loaders ● SimpleXMLElement ● PDO ● JSON
  • 15.
    Own Loaders ● Interface FluentDOMLoader ● load() returns DOMDocument or DOMNode
  • 16.
    Extending FluentDOM ● FluentDOMCore ● spawn() ● push() ● unique() ● _applyContentsToNodes()
  • 17.
    Future ● CSS Selectors ● ?
  • 18.
    Get It ● http://fluentdom.org ● http://nightly.fluentdom.org ● svn://svn.fluentdom.org