PHP has both Document Object Model (DOM) and Simple API for XML (SAX) parsers for XML. The PHP DOM extension parses your XML into a convenient hierarchal structure, which allows access to various data elements by traversing the tree structure. The PHP SAX parser reads XML data sequentially, requires less memory, and is faster, but does not allow for random access to XML document elements.
Here is a quick comparison between SAX and DOM XML parsing:
|Better for large document handling because less memory is required||Requires more memory|
|Better for retrieving a specific value from a document||Allows random access, but is slower when trying to find a specific value|
|Read-only access, no modification of document possible||Allows modification of document|
|Cannot be used with XPath and XSLT, which need access to the entire tree||Allows for the use of XPath and XSLT|
|Some XML can be validated||All XML can be validated|
This tutorial will be using the PHP DOM extension to parse the XML response from the Yahoo! Image Search Web service. There are several PHP DOM extensions available to parse XML. We'll be looking at the simplest to use, which is aptly called SimpleXML for PHP5. Because the PHP development team has stated that support for PHP4 will not be offered after August 8, 2008, we recommend using or migrating to PHP5. We have provided this domxml code sample to demonstrate how to parse XML with PHP4.
PHP5's SimpleXML extension makes parsing XML easy by creating an easily accessed PHP object structure from a string. Our example will only be showing a small range of what can be done with SimpleXML. To see more details, consult the SimpleXML documentation.
strstris used here to return the XML data in the response that follows the HTTP header.
curl_execearlier, the output should look like an unformatted version of the XML below with five results instead of one. On examining the XML, we see that the root is <ResultSet> and its child is the <Result node>. Our goal is to parse the XML to extract the title, summary, and URL from the <Result> node for our Web page.
simplexml_load_stringfrom the SimpleXML extension takes the XML response as a string argument and returns a SimpleXML object that can be easily traversed. The foreach loop returns the child Result from which the values for the nodes Title, Url, and Summary can be extracted. We save these values to a variable and output the results as a table. With PHP, we can do all of this with only ten lines of code:
Congratulations, you have finished making the Water Bear Gallery Web application using the Yahoo! Image Search Web Service. Now that you know how to make a REST request and parse XML, making a simple Web application that uses any Yahoo! Web service should be easy. The next step is to create a more efficient and robust application in Caching for Better Reliability and Performance.
The DOMDocument extension is excellent for creating XML, but you can also parse XML and is better than SimpleXML for parsing complex XML documents or XML documents of mixed content. This code sample will introduce the syntax and ways to implement the DOMDocument to parse XML. Other PHP extensions for parsing XML include XMLReader, which is suitable for large XML documents, and the PHP SAX parser.