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

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

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

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

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

Lecture 3 : PHP5-DOM API

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

DOM : recapAn 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

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

a simple element containingtext

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 (“)

XML document structure (recap)<?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>[email protected]</email><fax />

</patient>

xml declaration (optional) used by xml processor; this documents conforms to xml version 1 and uses the UTF-8 standard (Unicode optimized for ASCII)

root element; every well formed xml document must be enclosed by exactly one root element.

empty elements

a complex elementcontaining other elementsand text

a comment; comments must be delimited by the <!-- --> characters as in xhtml

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

PHP5 DOM Outline

o Create DOM Object o Load XML from a file/stringo Manipulate DOM Object

o Search/Delete/Create/Replace DOMNodeo Set/Get DOMAttribute

o Save DOM Object into a XML file.

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

Load XML from a file

o SyntaxDOMDocument::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();

?>

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

Load XML from a string

o SyntaxDOMDocument::loadXML ( string $source [, int $options =

0 ] )

o Example<?php

$dom = new DOMDocument("1.0", "utf-8"); $dom->loadXML("<?xml version='1.0' encoding='utf-8'?>"); echo $dom->saveXML();?>

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

Search DOMNode

o SyntaxDOMNodeList DOMElement::getElementsByTagName ( string $name )

DOMNodeList DOMXPath::query ( string $expression [, DOMNode $contextnode ] )

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

Using XPath to search documentsSometimes 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 aa/b : matches any tag named b, directly contained in the tag a a/b/.. : matches and returns the tag a instead of ba//b : matches b when it is any descendent of aa[31] : matches the 31st a taga[last()] : matches the very last a taga[@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”

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

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>

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

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 />"; }

?>

o Output000100020003

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

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; } }?>

o OutputAuth = Laby

<book sn="0002"> <auth>Laby</auth> <name>Programming PHP</name> <price>£20.00</price> </book>

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

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

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

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>

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

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

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

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

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

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>

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

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