1 / 17

UFCEWT-20-3 Advanced Topics in Web Development 2012/13

UFCEWT-20-3 Advanced Topics in Web Development 2012/13. Lecture 3 : PHP5-DOM API. DOM : recap. An object-based , language-neutral , application programming interface ( API ) for XML and HTML documents

brooks
Download Presentation

UFCEWT-20-3 Advanced Topics in Web Development 2012/13

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UFCEWT-20-3 Advanced Topics in Web Development 2012/13 Lecture 3 : PHP5-DOM API

  2. DOM : recap • An object-based, language-neutral, application programming interface (API) for XML and HTML documents • - allows programs and scripts to build documents, navigate their structure, add, modify or delete elements and content • - provides a foundation for developing querying, filtering, transformation, rendering etc. applications on top of DOM implementations • In contrast to “Serial Access XML” (sax) a good way to think of the DOM is as “Directly Obtainable in Memory” objects representing the nodes, attributes and content of documents

  3. XML document structure (recap) xml declaration (optional) used by xml processor; this documents conforms to xml version 1 and uses the UTF-8 standard (Unicode optimized for ASCII) <?xml version="1.0" encoding="UTF-8"?> <patient nhs-no="7503557856"> <!-- Patient demographics --> <name > <first>Joseph</first> <middle>Michael</middle> <last>Bloggs</last> <previous/> <preferred>Joe</preferred> </name> <title>Mr</title> <address> <street>2 Gloucester Road</street> <street /> <street /> <city>Bristol</city> <county>Avon</county> <postcode>BS2 4QS</postcode> </address> <tel> <home>0117 9541054</home> <mobile>07710 234674</mobile> </tel> <email>joe.bloggs@email.com</email> <fax /> </patient> root element; every well formed xml document must be enclosed by exactly one root element. attribute; attributes provide additional information about an element and consist of a name value pair; the value must be enclosed in a single (‘) or double quote (“) a comment; comments must be delimited by the <!-- --> characters as in xhtml a simple element containing text a complex element containing other elements and text empty elements

  4. PHP5 DOM Outline • Create DOM Object • Load XML from a file/string • Manipulate DOM Object • Search/Delete/Create/Replace DOMNode • Set/Get DOMAttribute • Save DOM Object into a XML file.

  5. Load XML from a file • Syntax DOMDocument::load ( string $filename [, int $options = 0 ] ) • Example <?php $dom = new DOMDocument("1.0",  "utf-8"); // load XML from a book.xml $dom->load(" book.xml "); echo $dom->saveXML(); ?>

  6. Load XML from a string • Syntax DOMDocument::loadXML ( string $source [, int $options = 0 ] ) • Example <?php $dom = new DOMDocument("1.0", "utf-8"); $dom->loadXML("<?xml version='1.0' encoding='utf-8'?>"); echo $dom->saveXML(); ?>

  7. Search DOMNode • Syntax DOMNodeListDOMElement::getElementsByTagName ( string $name ) DOMNodeListDOMXPath::query ( string $expression [, DOMNode $contextnode ] )

  8. Using XPath to search documents Sometimes there is a need to search through a document (e.g. when the exact format or order of the nodes is not known in advance) or when only a small set of nodes need to be found in a very large document. The basic format of a XPath query takes the form “a/b/c” where a, b, c are nested xml tags of the form <a><b><c/></b></a>. Some common XPath queries are as follows: a: matches any tag named a a/b : matches any tag named b, directly contained in the tag a a/b/.. : matches and returns the tag a instead of b a//b : matches b when it is any descendent of a a[31] : matches the 31st a tag a[last()] : matches the very last a tag a[@att] : matches any a with an attribute named “att” a[@att=“val”] matches any tag called a with an attribute named “att” with the value “val”

  9. example file (book.xml) <?xml version="1.0" encoding="utf-8"?> <books> <book sn="0001"> <auth>Dai</auth> <name>Practical Programming in Tcl and Tk</name> <price>£30.00</price> </book> <book sn="0002"> <auth>Laby</auth> <name>Programming PHP</name> <price>£20.00</price> </book> <book sn="0003"> <auth>Hill</auth> <name>Thinking in Java</name> <price>£15.00</price> </book> </books>

  10. Example for DOMElement:: getElementsByTagName <?php $dom = new DOMDocument("1.0", "utf-8"); $dom->load("book.xml"); $nodes = $dom->getElementsByTagName("book"); foreach($nodes as $n) { echo $n->getAttribute("sn"). "<br />"; } ?> • Output 0001 0002 0003

  11. Example for DOMXPath::query <?php $dom = new DOMDocument("1.0", "utf-8"); $dom->load("book.xml"); $xpath = new DOMXPath($dom); $nodes = $xpath->query("/books/book[@sn='0002']"); foreach ($nodes as $n) { $authNodes = $n->getElementsByTagName("auth"); foreach ($authNodes as $n2) { echo $n2->nodeName." = ".$n2->nodeValue; } } ?> • Output Auth = Laby <book sn="0002"> <auth>Laby</auth> <name>Programming PHP</name> <price>£20.00</price> </book>

  12. Example: Delete DOMNode <?php $dom = new DOMDocument("1.0", "utf-8"); $dom->load("book.xml"); $nodes = $dom->getElementsByTagName("book"); foreach ($nodes as $n) { if($n->getAttribute("sn") == "0003") { $parent = $n->parentNode; $parent->removeChild($n); } } echo $dom->saveXML(); ?> <?xml version="1.0" encoding="utf-8"?> <books> <book sn="0001"> <auth>Dai</auth> <name>Practical Programming in Tcl and Tk</name> <price>£30.00</price> </book> <book sn="0002"> <auth>Laby</auth> <name>Programming PHP</name> <price>£20.00</price> </book> </books> Output

  13. Example: Create DOMNode <?php $dom = new DOMDocument('1.0', 'utf-8'); $node = $dom->createElement('test', 'This is the root element!'); $dom->appendChild($node); echo $dom->saveXML();?> • Output <?xml version="1.0" encoding="utf-8"?> <test>This is the root element!</test>

  14. Example: Create DOMNode <?php $dom = new DOMDocument("1.0", "utf-8"); $dom->load("book.xml"); $nodes = $dom->getElementsByTagName("book"); foreach ($nodes as $n) { if($n->getAttribute("sn") == "0001") { $tag = $dom->createElement(‘tag', 'Good'); $n->appendChild($tag); } } echo $dom->saveXML(); ?> <book sn="0001"> <auth>Dai</auth> <name>Practical Programming in Tcl and Tk</name> <price>£30.00</price> <tag>Good</tag> </book> Result

  15. Example: Replace DOMNode <?php $dom = new DOMDocument("1.0", "utf-8"); $dom->load("book.xml"); $nodes = $dom->getElementsByTagName("book"); foreach ($nodes as $n) { if($n->getAttribute("sn") == "0001") { $newPrice = $dom->createElement('price', ‘£40.00'); $oldPrice = $n->getElementsByTagName("price")->item(0); $n->replaceChild($newPrice,$oldPrice); } } echo $dom->saveXML(); ?> <book sn="0001"> <auth>Dai</auth> <name>Practical Programming in Tcl and Tk</name> <price>£40.00</price> </book> Result

  16. Example: Get/Set DOMAttribute <?php $dom = new DOMDocument("1.0", "utf-8"); $dom->load("book.xml"); $nodes = $dom->getElementsByTagName("book"); foreach ($nodes as $n) { $sn = $n->getAttribute("sn"); $sn = "SN-".$sn; $n->setAttribute("sn",$sn); } echo $dom->saveXML(); ?> <book sn="0001"> … </book> <book sn="0002"> … </book> <book sn=“SN-0001"> … </book> <book sn=“SN-0002"> … </book>

  17. Save DOM Object into a XML file <?php $dom = new DOMDocument("1.0", "utf-8"); $root = $dom->createElement('book'); $root = $dom->appendChild($root); $auth = $dom->createElement('auth'); $auth = $root->appendChild($auth); $text = $dom->createTextNode('This is the title'); $text = $auth->appendChild($text); echo $dom->save("test.xml"); ?> <?xml version="1.0" encoding="utf-8"?> <book><auth>This is the title</auth></book> test.xml

More Related