w3resource

PHP: Read and extract data from an XML file

PHP File Handling: Exercise-16 with Solution

Write a PHP program that reads an XML file and extracts specific data from it.

books.xml


<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
   <book id="bk103">
      <author>Corets, Eva</author>
      <title>Maeve Ascendant</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-11-17</publish_date>
      <description>After the collapse of a nanotechnology 
      society in England, the young survivors lay the 
      foundation for a new society.</description>
   </book>
   <book id="bk104">
      <author>Corets, Eva</author>
      <title>Oberon's Legacy</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2001-03-10</publish_date>
      <description>In post-apocalypse England, the mysterious 
      agent known only as Oberon helps to create a new life 
      for the inhabitants of London. Sequel to Maeve 
      Ascendant.</description>
   </book>
   <book id="bk105">
      <author>Corets, Eva</author>
      <title>The Sundered Grail</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2001-09-10</publish_date>
      <description>The two daughters of Maeve, half-sisters, 
      battle one another for control of England. Sequel to 
      Oberon's Legacy.</description>
   </book>
</catalog>

Sample Solution:

PHP Code :

<?php
$filename = "i:/books.xml";
$desiredAuthor = "Ralls, Kim";
echo "Search for the author: " . $desiredAuthor;
try {
    $xml = simplexml_load_file($filename);

    // Iterate over book elements and extract specific data based on condition
    foreach ($xml->book as $book) {
        $author = $book->author;

        if ($author == $desiredAuthor) {
            $title = $book->title;
            $price = $book->price;
            $genre = $book->genre;

            // Display the extracted data
            echo "</br>Title: " . $title . "\n";
            echo "</br>Genre: " . $genre . "\n";
            echo "</br>Price: " . $price . "\n";
        }
    }
} catch (Exception $e) {
    echo "An error occurred: " . $e->getMessage();
}
?>

Sample Output:

Search for the author: Ralls, Kim
Title: Midnight Rain
Genre: Fantasy
Price: 5.95

Explanation:

In the above exercise -

  • The $filename variable holds the name of the XML file we want to read and extract data from.
  • Inside the try block, we use the simplexml_load_file() function to load the XML file and parse it into a SimpleXMLElement object.
  • In the event that there is an error loading the file or parsing the XML, we throw an exception with the error message "An error occurred."
  • We then extract specific data from the XML using object notation (->) and the XML element names.
  • Finally, we display the extracted data using the echo statement.

Flowchart:

Flowchart: Read and extract data from an XML file

PHP Code Editor:

Contribute your code and comments through Disqus.

Previous: Read and display file contents.
Next: Read and convert to an associative array.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.