SlideShare a Scribd company logo
SimpleXML
XML XML is stand for Extensible Markup Language – a general purpose for markup language. Classified as an extensible language because it allows its users to define their own elements. XML file:- <?xml version=&quot;1.0&quot;?>  <book>      <name>Ayu</name>      <age>21</age>      <gender>Female</gender>      <address>          <current>Kuala Lumpur</current>          <permanent>Kedah</permanent>      </address>  </book> Purpose :- To facilitate the sharing of structured data across different information systems, particularly via the Internet. Encode documents and serialize data. PHP includes support two standard methods of parsing XML. SAX DOM PHP 5.0 introduces new XML extension called SimpleXML.
Processing XML Documents SAX (Simple API for XML) Involved traversing an XML document and calling specific functions as the parser encountered different types of tags. Example – one function is called to process a starting tag, another function to process an ending tag and a third function to process the data between them. DOM (Document Object Model) Involved creating a tree representation of the XML document in memory and then using the tree-traversal methods to navigate it. Once a particular node of the tree was reached, the corresponding content could be retrieved and used. Neither of these approaches was particularly user-friendly. SAX required a developer to custom-craft event handlers for each type of element encountered in an XML file. DOM approach used an object-oriented paradigm – memory-intensive and inefficient with large XML documents. PHP 4 used a number of different backend libraries for each of its different XML extensions. Leads to inconsistency in the way different XML extensions worked and thus creating interoperability concerns.
In PHP 5.0, libxml2 library is adopted as the standard library for all XML extensions and various XML extensions is obtained to operate more consistently. SimpleXML:- Developed by Sterling Hughes, Rob Richards and Marcus Borger. Made more user-friendly in parsing XML documents. An XML document is converted into an object. Turn the elements within that document into object properties which can be accessed using standard object notation. Repeated elements at the same level of the document tree are represented as an arrays. Custom element collections can be created using XPath location paths; these collections can be processed using PHP’s loop construct. PHP build must include support for SimpleXML – to use SimpleXML and PHP together. This support is enabled by default in UNIX and Windows versions of PHP 5. SimpleXML is only available for PHP 5.
Example of SimpleXML Example 1 Consider the XML file below:- <?xml version = &quot;1.0&quot; ?>  MODIFIED <pet>      <name>Polly Parrot</name>      <age>3</age>      <species>parrot</species>      <parents>          <mother>Pia Parrot</mother>          <father>Peter Parrot</father>      </parents>  </pet>   To get the content enclosed between the <name>, <age>, <species> and <parents> elements :- <?php  // set name of XML file  $file  =  &quot;pet.xml&quot; ;  // load file  $xml  =  simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; );  // access XML data  echo  &quot;Name: &quot;  .  $xml -> name  .  &quot;\n&quot; ;  echo  &quot;Age: &quot;  .  $xml -> age  .  &quot;\n&quot; ;  echo  &quot;Species: &quot;  .  $xml -> species  .  &quot;\n&quot; ;  echo  &quot;Parents: &quot;  .  $xml -> parents -> mother  .  &quot; and &quot;  .   $xml -> parents -> father  .  &quot;\n&quot; ;  ?>
simplexml_load_file() function - accepts the path and name of the XML file to be parsed.  The result of parsing the file is a PHP object, whose properties correspond to the elements under the root element.  The character data within an element can then be accessed using standard object  ->  property notation, beginning with the root element and moving down the hierarchical path of the document.  Assign a new value to the corresponding object property. This will modify the original data. <?php  // set name of XML file  $file  =  &quot;pet.xml&quot; ;  // load file  $xml  =  simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; );  // modify XML data  $xml -> name  =  &quot;Sammy Snail&quot; ;  $xml -> age  =  4 ;  $xml -> species  =  &quot;snail&quot; ;  $xml -> parents -> mother  =  &quot;Sue Snail&quot; ;  $xml -> parents -> father  =  &quot;Sid Snail&quot; ;  // write new data to file  file_put_contents ( $file ,  $xml -> asXML ());  ?>   Figure 11.1 : Output for Example 1
<?xml version=&quot;1.0&quot;?> <pet>   <name>Sammy Snail</name>   <age>4</age>   <species>snail</species>   <parents>   <mother>Sue Snail</mother>   <father>Sid Snail</father>   </parents> </pet> The modified XML file is shown above. The original is first read in and then the character enclosed within each element is altered by assigning new values to the corresponding object property. asXML() method is typically used to dump the XML tree back out to the standard output device. It is combined with the file_put-contents() function to overwrite the original XML document with the new data. ORIGINAL
Repeated Elements Repeated elements at the same level of the XML hierarchy are represented as an array elements and can be accessed using numeric indices. Consider the following XML file:- <?xml version = &quot;1.0&quot; ?>  <sins>      <sin>pride</sin>      <sin>envy</sin>      <sin>anger</sin>      <sin>greed</sin>      <sin>sloth</sin>      <sin>gluttony</sin>      <sin>lust</sin>  </sins>   Below is a PHP script that reads it and retrieves the data the XML file:-  <?php  // set name of XML file  $file  =  &quot;sins.xml&quot; ;  // load file  $xml  =  simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; );  // access each <sin>  echo  $xml -> sin [ 0 ] .  &quot;\n&quot; ;  echo  $xml -> sin [ 1 ] .  &quot;\n&quot; ;  echo  $xml -> sin [ 2 ] .  &quot;\n&quot; ;  echo  $xml -> sin [ 3 ] .  &quot;\n&quot; ;  echo  $xml -> sin [ 4 ] .  &quot;\n&quot; ;  echo  $xml -> sin [ 5 ] .  &quot;\n&quot; ;  echo  $xml -> sin [ 6 ] .  &quot;\n&quot; ;  ?>
Iterate over the collection with a foreach() loop also can be used to get the same output.   <?php  // set name of XML file  $file  =  &quot;sins.xml&quot; ;  // load file  $xml  =  simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; );  // iterate over <sin> element collection  foreach ( $xml -> sin  as  $sin ) {      echo  &quot;$sin\n&quot; ;  }  ?>   Figure 11.2 : Output for repeated elements
Element Attributes Handling  SimpleXML handles element attributes transparently. Attribute-value pairs are represented as members of a PHP associative array and can be accessed like regular array elements. Consider the codes below:- <?php // create XML string $str  = <<< XML <?xml version=&quot;1.0&quot;?> <shapes>     <shape type=&quot;circle&quot; radius=&quot;2&quot; />     <shape type=&quot;rectangle&quot; length=&quot;5&quot; width=&quot;2&quot; />     <shape type=&quot;square&quot; length=&quot;7&quot; /> </shapes> XML; // load string $xml  =  simplexml_load_string ( $str ) or die ( &quot;Unable to load XML string!&quot; ); // for each shape // calculate area foreach ( $xml -> shape  as  $shape ) {     if ( $shape [ 'type' ] ==  &quot;circle&quot; ) {          $area  =  pi () *  $shape [ 'radius' ] *  $shape [ 'radius' ];     }     elseif ( $shape [ 'type' ] ==  &quot;rectangle&quot; ) {          $area  =  $shape [ 'length' ] *  $shape [ 'width' ];     }     elseif ( $shape [ 'type' ] ==  &quot;square&quot; ) {          $area  =  $shape [ 'length' ] *  $shape [ 'length' ];     }     echo  $area . &quot;\n&quot; ; } ?>
This example creates XML dynamically and loads it into SimpleXML with the simplexml_load_string() method. The XML is then parsed with a foreach() loop and area for each shape calculated on the basis of the value of each <shape> element’s type attribute. Figure 11.3 : Element attribute handling
Custom Elements Collection SimpleXML also supports custom element collections through XPath location paths. XPath is a standard addressing mechanism for an XML document. It allows developers to access collections of elements, attributes or text nodes within a document. Consider the XML document below:- <?xml version = &quot;1.0&quot; ?>  <ingredients>      <item>          <desc>Boneless chicken breasts</desc>          <quantity>2</quantity>      </item>      <item>          <desc>Chopped onions</desc>          <quantity>2</quantity>      </item>       <item>    <desc>Ginger</desc>   <quantity>1</quantity>  </item>  <item>    <desc>Garlic</desc>    <quantity>1</quantity>  </item>  <item>     <desc>Red chili powder</desc>   <quantity>1</quantity>  </item>  <item>    <desc>Coriander seeds</desc>    <quantity>1</quantity>  </item>  <item>     <desc>Lime juice</desc>     <quantity>2</quantity>  </item>  </ingredients>
To print all the <desc> elements, iterate over the array item or create a custom collection of only the <desc> elements with the xpath() method and iterate over it. <?php  // set name of XML file  $file  =  &quot;ingredients.xml&quot; ;  // load file  $xml  =  simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; );  // get all the <desc> elements and print  foreach ( $xml -> xpath ( '//desc' ) as  $desc ) {      echo  &quot;$desc\n&quot; ;  }  ?>   Figure 11.4 : Output using Custom Collection
Using XPath, a lot more can be done. Creating a collection of only those <desc> elements whose corresponding quantities are two or more. Consider the example given below:- <?php  // set name of XML file  $file  =  &quot;ingredients.xml&quot; ;  // load file  $xml  =  simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; );  // get all the <desc> elements and print  foreach ( $xml -> xpath ( '//item[quantity > 1]/desc' ) as  $desc ) {      echo  &quot;$desc\n&quot; ;  }  ?>   Figure 11.5 : Output using XPath
Codes Review Consider the codes given below, a bunch of movie reviews marked up in XML.  <?xml version = &quot;1.0&quot; ?>  <review id=&quot;57&quot; category=&quot;2&quot;>      <title>Moulin Rouge</title>      <teaser>          Baz Luhrmann's over-the-top vision of Paris at the turn of the century          is witty, sexy...and completely unforgettable      </teaser>      <cast>          <person>Nicole Kidman</person>          <person>Ewan McGregor</person>          <person>John Leguizamo</person>          <person>Jim Broadbent</person>          <person>Richard Roxburgh</person>      </cast>      <director>Baz Luhrmann</director>      <duration>120</duration>      <genre>Romance/Comedy</genre>      <year>2001</year>      <body>          A stylishly spectacular extravaganza, Moulin Rouge is hard to          categorize; it is, at different times, a love story, a costume drama,          a musical, and a comedy. Director Baz Luhrmann (well-known for the          very hip William Shakespeare's Romeo + Juliet) has taken some simple          themes - love, jealousy and obsession - and done something completely          new and different with them by setting them to music.      </body>      <rating>5</rating>  </review>
To display this review on Web site, use a PHP script to extract the data from the file and place it in the appropriate locations in an HTML template. <?php  // set name of XML file  // normally this would come through GET  // it's hard-wired here for simplicity  $file  =  &quot;57.xml&quot; ;  // load file  $xml  =  simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; );  ?>  <html>  <head><basefont face=&quot;Arial&quot;></head>  <body>  <!-- title and year -->  <h1> <?php  echo  $xml -> title ;  ?>  ( <?php  echo  $xml -> year ;  ?> )</h1>  <!-- slug -->  <h3> <?php  echo  $xml -> teaser ;  ?> </h3>  <!-- review body -->  <?php  echo  $xml -> body ;  ?>  <!-- director, cast, duration and rating -->  <p align=&quot;right&quot;/>  <font size=&quot;-2&quot;>  Director: <b> <?php  echo  $xml -> director ;  ?> </b>  <br />  Duration: <b> <?php  echo  $xml -> duration ;  ?>  min</b>  <br />  Cast: <b> <?php  foreach ( $xml -> cast -> person  as  $person ) { echo  &quot;$person &quot; ; }  ?> </b>  <br />  Rating: <b> <?php  echo  $xml -> rating ;  ?> </b>  </font>  </body>  </html>
Figure 11.6 : Output using PHP script
Summary XML is stand for Extensible Markup Language. PHP includes support two standard methods of parsing XML ; SAX and DOM. PHP 5.0 introduces new XML extension called SimpleXML. libxml2 library is adopted as the standard library for all XML extensions. Repeated elements at the same level of the XML hierarchy are represented as an array elements and can be accessed using numeric indices. Attribute-value pairs are represented as members of a PHP associative array and can be accessed like regular array elements. SimpleXML supports custom element collections through XPath location paths. XPath is a standard addressing mechanism for an XML document.

More Related Content

PPTX
Fundamentals of Python Programming
PPTX
Data Structures in Python
PDF
PHP Loops and PHP Forms
PPTX
Triggers
PPT
9. Input Output in java
PPT
Servlet life cycle
ODP
Python Modules
PPTX
Event Handling in java
Fundamentals of Python Programming
Data Structures in Python
PHP Loops and PHP Forms
Triggers
9. Input Output in java
Servlet life cycle
Python Modules
Event Handling in java

What's hot (20)

ODP
PPTX
Python dictionary
PPTX
Challenges of Conventional Systems.pptx
PPT
Quick sort data structures
PPT
Lec 17 heap data structure
PPT
Introduction to XML
PPTX
PDF
The matplotlib Library
PDF
Users of dbms
PPTX
Data mining tasks
PDF
Html frames
PPTX
Arrays in Data Structure and Algorithm
PPTX
Error managing and exception handling in java
PPTX
Data types
PPTX
Constants in java
PPTX
Types of Database Models
PPTX
Control structures in java
DOCX
Python - Regular Expressions
Python dictionary
Challenges of Conventional Systems.pptx
Quick sort data structures
Lec 17 heap data structure
Introduction to XML
The matplotlib Library
Users of dbms
Data mining tasks
Html frames
Arrays in Data Structure and Algorithm
Error managing and exception handling in java
Data types
Constants in java
Types of Database Models
Control structures in java
Python - Regular Expressions
Ad

Similar to Php Simple Xml (20)

PPT
DOM and SAX
PPT
PHP 5 Sucks. PHP 5 Rocks.
PPT
XML and Web Services with PHP5 and PEAR
PPT
PPT
XML processing with perl
PPT
XML and PHP 5
PPT
XML Transformations With PHP
PPTX
XML and Web Services
PDF
Xml Demystified
PPT
Xml Zoe
PPT
Xml Zoe
PPT
Inroduction to XSLT with PHP4
PPT
XML::Liberal
PPT
Everything You Always Wanted To Know About XML But Were Afraid To Ask
PDF
The state of your own hypertext preprocessor
PPT
The Big Documentation Extravaganza
PPT
SimpleXML In PHP 5
KEY
groovy & grails - lecture 4
PPT
Introduction To Xml
PPT
Pxb For Yapc2008
DOM and SAX
PHP 5 Sucks. PHP 5 Rocks.
XML and Web Services with PHP5 and PEAR
XML processing with perl
XML and PHP 5
XML Transformations With PHP
XML and Web Services
Xml Demystified
Xml Zoe
Xml Zoe
Inroduction to XSLT with PHP4
XML::Liberal
Everything You Always Wanted To Know About XML But Were Afraid To Ask
The state of your own hypertext preprocessor
The Big Documentation Extravaganza
SimpleXML In PHP 5
groovy & grails - lecture 4
Introduction To Xml
Pxb For Yapc2008
Ad

More from mussawir20 (20)

PPT
Php Operators N Controllers
PPT
Php Calling Operators
PPT
Database Design Process
PPT
Php String And Regular Expressions
PPT
Php Sq Lite
PPT
Php Sessoins N Cookies
PPT
Php Rss
PPT
Php Reusing Code And Writing Functions
PPT
Php Oop
PPT
Php My Sql
PPT
Php File Operations
PPT
Php Error Handling
PPT
Php Crash Course
PPT
Php Basic Security
PPT
Php Using Arrays
PPT
Javascript Oop
PPT
PPT
Javascript
PPT
Object Range
PPT
Prototype Utility Methods(1)
Php Operators N Controllers
Php Calling Operators
Database Design Process
Php String And Regular Expressions
Php Sq Lite
Php Sessoins N Cookies
Php Rss
Php Reusing Code And Writing Functions
Php Oop
Php My Sql
Php File Operations
Php Error Handling
Php Crash Course
Php Basic Security
Php Using Arrays
Javascript Oop
Javascript
Object Range
Prototype Utility Methods(1)

Recently uploaded (20)

PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
MYSQL Presentation for SQL database connectivity
PDF
CIFDAQ's Market Wrap: Ethereum Leads, Bitcoin Lags, Institutions Shift
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Modernizing your data center with Dell and AMD
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
KodekX | Application Modernization Development
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Empathic Computing: Creating Shared Understanding
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
PDF
Transforming Manufacturing operations through Intelligent Integrations
PDF
Sensors and Actuators in IoT Systems using pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Advanced Soft Computing BINUS July 2025.pdf
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Diabetes mellitus diagnosis method based random forest with bat algorithm
NewMind AI Monthly Chronicles - July 2025
Review of recent advances in non-invasive hemoglobin estimation
MYSQL Presentation for SQL database connectivity
CIFDAQ's Market Wrap: Ethereum Leads, Bitcoin Lags, Institutions Shift
Dropbox Q2 2025 Financial Results & Investor Presentation
Modernizing your data center with Dell and AMD
Chapter 3 Spatial Domain Image Processing.pdf
KodekX | Application Modernization Development
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Empathic Computing: Creating Shared Understanding
NewMind AI Weekly Chronicles - August'25 Week I
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
Transforming Manufacturing operations through Intelligent Integrations
Sensors and Actuators in IoT Systems using pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Advanced Soft Computing BINUS July 2025.pdf
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)

Php Simple Xml

  • 2. XML XML is stand for Extensible Markup Language – a general purpose for markup language. Classified as an extensible language because it allows its users to define their own elements. XML file:- <?xml version=&quot;1.0&quot;?> <book>     <name>Ayu</name>     <age>21</age>     <gender>Female</gender>     <address>         <current>Kuala Lumpur</current>         <permanent>Kedah</permanent>     </address> </book> Purpose :- To facilitate the sharing of structured data across different information systems, particularly via the Internet. Encode documents and serialize data. PHP includes support two standard methods of parsing XML. SAX DOM PHP 5.0 introduces new XML extension called SimpleXML.
  • 3. Processing XML Documents SAX (Simple API for XML) Involved traversing an XML document and calling specific functions as the parser encountered different types of tags. Example – one function is called to process a starting tag, another function to process an ending tag and a third function to process the data between them. DOM (Document Object Model) Involved creating a tree representation of the XML document in memory and then using the tree-traversal methods to navigate it. Once a particular node of the tree was reached, the corresponding content could be retrieved and used. Neither of these approaches was particularly user-friendly. SAX required a developer to custom-craft event handlers for each type of element encountered in an XML file. DOM approach used an object-oriented paradigm – memory-intensive and inefficient with large XML documents. PHP 4 used a number of different backend libraries for each of its different XML extensions. Leads to inconsistency in the way different XML extensions worked and thus creating interoperability concerns.
  • 4. In PHP 5.0, libxml2 library is adopted as the standard library for all XML extensions and various XML extensions is obtained to operate more consistently. SimpleXML:- Developed by Sterling Hughes, Rob Richards and Marcus Borger. Made more user-friendly in parsing XML documents. An XML document is converted into an object. Turn the elements within that document into object properties which can be accessed using standard object notation. Repeated elements at the same level of the document tree are represented as an arrays. Custom element collections can be created using XPath location paths; these collections can be processed using PHP’s loop construct. PHP build must include support for SimpleXML – to use SimpleXML and PHP together. This support is enabled by default in UNIX and Windows versions of PHP 5. SimpleXML is only available for PHP 5.
  • 5. Example of SimpleXML Example 1 Consider the XML file below:- <?xml version = &quot;1.0&quot; ?> MODIFIED <pet>     <name>Polly Parrot</name>     <age>3</age>     <species>parrot</species>     <parents>         <mother>Pia Parrot</mother>         <father>Peter Parrot</father>     </parents> </pet> To get the content enclosed between the <name>, <age>, <species> and <parents> elements :- <?php // set name of XML file $file = &quot;pet.xml&quot; ; // load file $xml = simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; ); // access XML data echo &quot;Name: &quot; . $xml -> name . &quot;\n&quot; ; echo &quot;Age: &quot; . $xml -> age . &quot;\n&quot; ; echo &quot;Species: &quot; . $xml -> species . &quot;\n&quot; ; echo &quot;Parents: &quot; . $xml -> parents -> mother . &quot; and &quot; .   $xml -> parents -> father . &quot;\n&quot; ; ?>
  • 6. simplexml_load_file() function - accepts the path and name of the XML file to be parsed. The result of parsing the file is a PHP object, whose properties correspond to the elements under the root element. The character data within an element can then be accessed using standard object -> property notation, beginning with the root element and moving down the hierarchical path of the document. Assign a new value to the corresponding object property. This will modify the original data. <?php // set name of XML file $file = &quot;pet.xml&quot; ; // load file $xml = simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; ); // modify XML data $xml -> name = &quot;Sammy Snail&quot; ; $xml -> age = 4 ; $xml -> species = &quot;snail&quot; ; $xml -> parents -> mother = &quot;Sue Snail&quot; ; $xml -> parents -> father = &quot;Sid Snail&quot; ; // write new data to file file_put_contents ( $file , $xml -> asXML ()); ?> Figure 11.1 : Output for Example 1
  • 7. <?xml version=&quot;1.0&quot;?> <pet> <name>Sammy Snail</name> <age>4</age> <species>snail</species> <parents> <mother>Sue Snail</mother> <father>Sid Snail</father> </parents> </pet> The modified XML file is shown above. The original is first read in and then the character enclosed within each element is altered by assigning new values to the corresponding object property. asXML() method is typically used to dump the XML tree back out to the standard output device. It is combined with the file_put-contents() function to overwrite the original XML document with the new data. ORIGINAL
  • 8. Repeated Elements Repeated elements at the same level of the XML hierarchy are represented as an array elements and can be accessed using numeric indices. Consider the following XML file:- <?xml version = &quot;1.0&quot; ?> <sins>     <sin>pride</sin>     <sin>envy</sin>     <sin>anger</sin>     <sin>greed</sin>     <sin>sloth</sin>     <sin>gluttony</sin>     <sin>lust</sin> </sins> Below is a PHP script that reads it and retrieves the data the XML file:- <?php // set name of XML file $file = &quot;sins.xml&quot; ; // load file $xml = simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; ); // access each <sin> echo $xml -> sin [ 0 ] . &quot;\n&quot; ; echo $xml -> sin [ 1 ] . &quot;\n&quot; ; echo $xml -> sin [ 2 ] . &quot;\n&quot; ; echo $xml -> sin [ 3 ] . &quot;\n&quot; ; echo $xml -> sin [ 4 ] . &quot;\n&quot; ; echo $xml -> sin [ 5 ] . &quot;\n&quot; ; echo $xml -> sin [ 6 ] . &quot;\n&quot; ; ?>
  • 9. Iterate over the collection with a foreach() loop also can be used to get the same output. <?php // set name of XML file $file = &quot;sins.xml&quot; ; // load file $xml = simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; ); // iterate over <sin> element collection foreach ( $xml -> sin as $sin ) {     echo &quot;$sin\n&quot; ; } ?> Figure 11.2 : Output for repeated elements
  • 10. Element Attributes Handling SimpleXML handles element attributes transparently. Attribute-value pairs are represented as members of a PHP associative array and can be accessed like regular array elements. Consider the codes below:- <?php // create XML string $str = <<< XML <?xml version=&quot;1.0&quot;?> <shapes>     <shape type=&quot;circle&quot; radius=&quot;2&quot; />     <shape type=&quot;rectangle&quot; length=&quot;5&quot; width=&quot;2&quot; />     <shape type=&quot;square&quot; length=&quot;7&quot; /> </shapes> XML; // load string $xml = simplexml_load_string ( $str ) or die ( &quot;Unable to load XML string!&quot; ); // for each shape // calculate area foreach ( $xml -> shape as $shape ) {     if ( $shape [ 'type' ] == &quot;circle&quot; ) {          $area = pi () * $shape [ 'radius' ] * $shape [ 'radius' ];     }     elseif ( $shape [ 'type' ] == &quot;rectangle&quot; ) {          $area = $shape [ 'length' ] * $shape [ 'width' ];     }     elseif ( $shape [ 'type' ] == &quot;square&quot; ) {          $area = $shape [ 'length' ] * $shape [ 'length' ];     }     echo $area . &quot;\n&quot; ; } ?>
  • 11. This example creates XML dynamically and loads it into SimpleXML with the simplexml_load_string() method. The XML is then parsed with a foreach() loop and area for each shape calculated on the basis of the value of each <shape> element’s type attribute. Figure 11.3 : Element attribute handling
  • 12. Custom Elements Collection SimpleXML also supports custom element collections through XPath location paths. XPath is a standard addressing mechanism for an XML document. It allows developers to access collections of elements, attributes or text nodes within a document. Consider the XML document below:- <?xml version = &quot;1.0&quot; ?> <ingredients>     <item>         <desc>Boneless chicken breasts</desc>         <quantity>2</quantity>     </item>     <item>         <desc>Chopped onions</desc>         <quantity>2</quantity>     </item>      <item> <desc>Ginger</desc> <quantity>1</quantity> </item> <item>  <desc>Garlic</desc>   <quantity>1</quantity> </item> <item>    <desc>Red chili powder</desc>  <quantity>1</quantity> </item> <item>   <desc>Coriander seeds</desc>   <quantity>1</quantity> </item> <item>    <desc>Lime juice</desc>    <quantity>2</quantity> </item> </ingredients>
  • 13. To print all the <desc> elements, iterate over the array item or create a custom collection of only the <desc> elements with the xpath() method and iterate over it. <?php // set name of XML file $file = &quot;ingredients.xml&quot; ; // load file $xml = simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; ); // get all the <desc> elements and print foreach ( $xml -> xpath ( '//desc' ) as $desc ) {     echo &quot;$desc\n&quot; ; } ?> Figure 11.4 : Output using Custom Collection
  • 14. Using XPath, a lot more can be done. Creating a collection of only those <desc> elements whose corresponding quantities are two or more. Consider the example given below:- <?php // set name of XML file $file = &quot;ingredients.xml&quot; ; // load file $xml = simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; ); // get all the <desc> elements and print foreach ( $xml -> xpath ( '//item[quantity > 1]/desc' ) as $desc ) {     echo &quot;$desc\n&quot; ; } ?> Figure 11.5 : Output using XPath
  • 15. Codes Review Consider the codes given below, a bunch of movie reviews marked up in XML. <?xml version = &quot;1.0&quot; ?> <review id=&quot;57&quot; category=&quot;2&quot;>     <title>Moulin Rouge</title>     <teaser>         Baz Luhrmann's over-the-top vision of Paris at the turn of the century         is witty, sexy...and completely unforgettable     </teaser>     <cast>         <person>Nicole Kidman</person>         <person>Ewan McGregor</person>         <person>John Leguizamo</person>         <person>Jim Broadbent</person>         <person>Richard Roxburgh</person>     </cast>     <director>Baz Luhrmann</director>     <duration>120</duration>     <genre>Romance/Comedy</genre>     <year>2001</year>     <body>         A stylishly spectacular extravaganza, Moulin Rouge is hard to         categorize; it is, at different times, a love story, a costume drama,         a musical, and a comedy. Director Baz Luhrmann (well-known for the         very hip William Shakespeare's Romeo + Juliet) has taken some simple         themes - love, jealousy and obsession - and done something completely         new and different with them by setting them to music.     </body>     <rating>5</rating> </review>
  • 16. To display this review on Web site, use a PHP script to extract the data from the file and place it in the appropriate locations in an HTML template. <?php // set name of XML file // normally this would come through GET // it's hard-wired here for simplicity $file = &quot;57.xml&quot; ; // load file $xml = simplexml_load_file ( $file ) or die ( &quot;Unable to load XML file!&quot; ); ?> <html> <head><basefont face=&quot;Arial&quot;></head> <body> <!-- title and year --> <h1> <?php echo $xml -> title ; ?> ( <?php echo $xml -> year ; ?> )</h1> <!-- slug --> <h3> <?php echo $xml -> teaser ; ?> </h3> <!-- review body --> <?php echo $xml -> body ; ?> <!-- director, cast, duration and rating --> <p align=&quot;right&quot;/> <font size=&quot;-2&quot;> Director: <b> <?php echo $xml -> director ; ?> </b> <br /> Duration: <b> <?php echo $xml -> duration ; ?> min</b> <br /> Cast: <b> <?php foreach ( $xml -> cast -> person as $person ) { echo &quot;$person &quot; ; } ?> </b> <br /> Rating: <b> <?php echo $xml -> rating ; ?> </b> </font> </body> </html>
  • 17. Figure 11.6 : Output using PHP script
  • 18. Summary XML is stand for Extensible Markup Language. PHP includes support two standard methods of parsing XML ; SAX and DOM. PHP 5.0 introduces new XML extension called SimpleXML. libxml2 library is adopted as the standard library for all XML extensions. Repeated elements at the same level of the XML hierarchy are represented as an array elements and can be accessed using numeric indices. Attribute-value pairs are represented as members of a PHP associative array and can be accessed like regular array elements. SimpleXML supports custom element collections through XPath location paths. XPath is a standard addressing mechanism for an XML document.