-
Hajipur, Bihar, 844101
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.
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>
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>
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.
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>";
}
?>
$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
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.
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
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.
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.
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.
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.
You can easily count how many specific elements exist using count().
<?php
echo "Total Students: " . count($xml->student);
?>
Output:
Total Students: 3
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.
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.
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.
| 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']") |
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.
Load students.xml using SimpleXML and print the name of the first student.
Access and display the id attribute of each <student> element in students.xml.
Write a script to print the names of all students whose age is greater than 21.
Use SimpleXML to loop through all <student> elements and display both the name and course for each student.
Load an XML string containing a <user> with <name> and <email> tags, and print the email value.
Access a nested element <city> inside <details> for each student and print it.
Count how many <student> elements exist in students.xml and display the total.
Use XPath to get the name of the student with id="2" and print it.
Loop through all attributes of each <student> element and print the attribute name and value.
Check if an optional <email> tag exists for the first student. If it exists, print it; otherwise, print “Email not found.”