PHP SimpleXML – Get


The SimpleXML “Get” concept in PHP focuses on how to access and retrieve data from an XML file using the SimpleXML extension.

While you may already know how to load an XML file, this tutorial explains how to get specific elements, attributes, text values, and even nested data. You’ll also learn different ways to loop through XML structures and extract exactly what you need.

What Does “Get” Mean in SimpleXML?

When we say “get” in the context of SimpleXML, we mean reading or fetching values from XML elements or attributes.

For example, in the XML below, if you want to get the student’s name or age, SimpleXML gives you a simple way to do it using object notation.

<student>
  <name>Riya Sharma</name>
  <age>20</age>
  <course>Web Development</course>
</student>

Example XML File

Let’s use this sample file named students.xml throughout the tutorial:

<students>
  <student id="1">
    <name>Riya Sharma</name>
    <age>20</age>
    <course>Web Development</course>
  </student>
  <student id="2">
    <name>Ananya Singh</name>
    <age>22</age>
    <course>Data Science</course>
  </student>
  <student id="3">
    <name>Meera Patel</name>
    <age>21</age>
    <course>UI/UX Design</course>
  </student>
</students>

Loading the XML File

Before we can get data, we need to load the XML file using simplexml_load_file().

<?php
$xml = simplexml_load_file("students.xml") or die("Failed to load XML file");
?>

Now $xml is an object representing the entire XML document. You can access any element inside it directly.

Getting All Elements

To get all <student> elements, use a foreach loop.

<?php
foreach ($xml->student as $student) {
    echo "Name: " . $student->name . "<br>";
    echo "Age: " . $student->age . "<br>";
    echo "Course: " . $student->course . "<br><br>";
}
?>

Explanation

  • $xml->student returns all <student> nodes.

  • $student->name gets the <name> value.

  • You can access child elements easily using the -> operator.

Output:

Name: Riya Sharma
Age: 20
Course: Web Development

Getting a Specific Element by Index

If you only want a particular student, you can access it using array-style indexing.

<?php
echo $xml->student[1]->name; // Accesses the second student
?>

Output:

Ananya Singh

Remember: Indexing starts from 0, so [0] means the first student, [1] means the second, and so on.

Getting Attribute Values

Each <student> element has an id attribute. You can get it easily like this:

<?php
foreach ($xml->student as $student) {
    echo "Student ID: " . $student['id'] . " - " . $student->name . "<br>";
}
?>

Output:

Student ID: 1 - Riya Sharma
Student ID: 2 - Ananya Singh
Student ID: 3 - Meera Patel

You can also access attributes directly:

echo $xml->student[0]['id'];

Output:

1

Getting All Attributes Using Loop

If each element has multiple attributes, you can loop through them using the attributes() function.

<?php
foreach ($xml->student as $student) {
    foreach ($student->attributes() as $key => $value) {
        echo "$key: $value<br>";
    }
    echo "<br>";
}
?>

This dynamically prints all attributes of each <student> element.

Getting Nested Elements

XML files can have nested structures. Suppose your file looks like this:

<students>
  <student>
    <name>Riya Sharma</name>
    <details>
      <age>20</age>
      <city>Delhi</city>
    </details>
  </student>
</students>

You can access nested values like this:

<?php
$xml = simplexml_load_file("students.xml");
echo $xml->student->details->city; // Outputs: Delhi
?>

The -> operator allows you to move deeper into the XML structure easily.

Getting Data Conditionally

You can filter or get values based on a specific condition.

Example: Get names of students who are older than 21.

<?php
foreach ($xml->student as $student) {
    if ((int)$student->age > 21) {
        echo $student->name . "<br>";
    }
}
?>

Output:

Ananya Singh

Here, (int) converts the XML string value into an integer before comparison.

Getting XML as String

Sometimes, you might want to output the XML back as a string. You can do that with the asXML() method.

<?php
echo "<pre>" . htmlspecialchars($xml->asXML()) . "</pre>";
?>

This will print the entire XML structure in a readable format without executing it as HTML.

Getting Count of Elements

You can easily count how many specific elements exist using count().

<?php
echo "Total Students: " . count($xml->student);
?>

Output:

Total Students: 3

Getting Data from a Specific Tag Name

If you want to get all values of a specific tag name, you can loop directly over that tag.

<?php
foreach ($xml->xpath('//name') as $name) {
    echo $name . "<br>";
}
?>

xpath() allows you to get elements from anywhere in the XML file based on a query-like syntax.

Using XPath for Targeted Retrieval

XPath is a powerful feature for searching inside XML documents.

Example: Get the name of the student whose ID is 2.

<?php
$result = $xml->xpath("//student[@id='2']/name");
echo $result[0];
?>

Output:

Ananya Singh

This method is cleaner and faster when you need specific data without looping through everything.

Handling Empty or Missing Data

If a tag might not exist, you can check before accessing it:

<?php
if (!empty($xml->student[0]->email)) {
    echo $xml->student[0]->email;
} else {
    echo "Email not found!";
}
?>

This prevents errors when the XML doesn’t have the expected elements.

Summary of SimpleXML “Get” Methods

Task Function / Syntax
Get all elements $xml->student
Get specific element $xml->student[1]->name
Get attribute value $student['id']
Get nested value $xml->student->details->city
Get all attributes $student->attributes()
Get count of nodes count($xml->student)
Get specific nodes with XPath $xml->xpath("//student[@id='2']")

Summary of the Tutorial

The SimpleXML “Get” functions in PHP let you retrieve any part of an XML file in just a few lines. Whether it’s element values, attributes, or nested data, SimpleXML’s object-based approach keeps things simple and readable.

You now know how to:

  • Load and read XML data

  • Get specific elements and attributes

  • Use XPath for targeted queries

  • Handle nested and missing data

Once you’re comfortable with these techniques, you can apply them to real-world tasks like reading configuration files, processing API responses, or building data dashboards from XML feeds.


Practice Questions

  1. Load students.xml using SimpleXML and print the name of the first student.

  2. Access and display the id attribute of each <student> element in students.xml.

  3. Write a script to print the names of all students whose age is greater than 21.

  4. Use SimpleXML to loop through all <student> elements and display both the name and course for each student.

  5. Load an XML string containing a <user> with <name> and <email> tags, and print the email value.

  6. Access a nested element <city> inside <details> for each student and print it.

  7. Count how many <student> elements exist in students.xml and display the total.

  8. Use XPath to get the name of the student with id="2" and print it.

  9. Loop through all attributes of each <student> element and print the attribute name and value.

  10. Check if an optional <email> tag exists for the first student. If it exists, print it; otherwise, print “Email not found.”


Try a Short Quiz.

coding learning websites codepractice

No quizzes available.

Go Back Top