Structure and share data - Use PHP to create, parse, and manage XML and RSS feeds!
- XML (eXtensible Markup Language): A flexible format for structured data.
- RSS (Really Simple Syndication): An XML-based standard for sharing content (e.g., news feeds).
PHP provides powerful tools like SimpleXML and XML Parser to work with both.
Generate XML manually or with DOM.
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '<users>';
$xml .= '<user><name>Alex</name><age>25</age></user>';
$xml .= '</users>';
echo $xml;Using DOM:
$doc = new DOMDocument("1.0", "UTF-8");
$users = $doc->createElement("users");
$user = $doc->createElement("user");
$user->appendChild($doc->createElement("name", "Alex"));
$user->appendChild($doc->createElement("age", "25"));
$users->appendChild($user);
$doc->appendChild($users);
echo $doc->saveXML();Build an RSS feed.
$feed = '<?xml version="1.0" encoding="UTF-8"?>';
$feed .= '<rss version="2.0">';
$feed .= '<channel>';
$feed .= '<title>My Feed</title>';
$feed .= '<link>https://example.com</link>';
$feed .= '<description>Sample RSS Feed</description>';
$feed .= '<item>';
$feed .= '<title>First Post</title>';
$feed .= '<link>https://example.com/post1</link>';
$feed .= '<description>A great post!</description>';
$feed .= '</item>';
$feed .= '</channel>';
$feed .= '</rss>';
header("Content-Type: application/rss+xml");
echo $feed;Parse XML easily with simplexml_load_string() or simplexml_load_file().
$xml = '<users><user><name>Alex</name><age>25</age></user></users>';
$simple = simplexml_load_string($xml);
echo $simple->user->name; // Outputs: AlexFrom a file:
$simple = simplexml_load_file("users.xml");
echo $simple->user->age; // Outputs: 25Access XML attributes with attributes().
$xml = '<user id="1"><name>Alex</name></user>';
$simple = simplexml_load_string($xml);
$id = $simple->attributes()->id;
echo "ID: $id"; // Outputs: ID: 1Query XML with XPath.
$xml = '<users><user><name>Alex</name></user><user><name>Bella</name></user></users>';
$simple = simplexml_load_string($xml);
$names = $simple->xpath("//name");
foreach ($names as $name) {
echo $name . "<br>";
}
// Outputs:
// Alex
// BellaUpdate existing nodes.
$xml = '<user id="1"><name>Alex</name></user>';
$simple = simplexml_load_string($xml);
$simple->name = "Alexander";
$simple["id"] = "2";
echo $simple->asXML();
// Outputs: <user id="2"><name>Alexander</name></user>Extend XML dynamically.
$xml = '<users><user><name>Alex</name></user></users>';
$simple = simplexml_load_string($xml);
$newUser = $simple->addChild("user");
$newUser->addChild("name", "Bella");
$newUser->addAttribute("id", "2");
echo $simple->asXML();
// Outputs: <users><user><name>Alex</name></user><user id="2"><name>Bella</name></user></users>Serve XML with the correct header.
$xml = '<data><message>Hello, World!</message></data>';
header("Content-Type: text/xml");
echo $xml;Combine SimpleXML with DOM or XMLReader.
With DOM:
$simple = simplexml_load_string('<user><name>Alex</name></user>');
$dom = dom_import_simplexml($simple);
$dom->appendChild(new DOMElement("age", "25"));
echo simplexml_import_dom($dom)->asXML();
// Outputs: <user><name>Alex</name><age>25</age></user>Use low-level XML Parser for custom handling.
function startElement($parser, $name, $attrs) {
echo "Start: $name<br>";
}
function endElement($parser, $name) {
echo "End: $name<br>";
}
function characterData($parser, $data) {
echo "Data: $data<br>";
}
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
$xml = '<user><name>Alex</name></user>';
xml_parse($parser, $xml) or die("XML parsing failed");
xml_parser_free($parser);
// Outputs:
// Start: user
// Start: name
// Data: Alex
// End: name
// End: user| Task | Tool | Example Use Case |
|---|---|---|
| Create XML | DOMDocument |
Structured data |
| Create RSS | Manual string | News feeds |
| Parse XML | SimpleXML |
Easy access |
| XPath | xpath() |
Complex queries |
| Low-Level Parsing | xml_parser_create() |
Custom parsing logic |
- Validation: Validate XML against schemas when possible.
- Encoding: Always specify
UTF-8for compatibility. - Simplicity: Use SimpleXML for most tasks, DOM for complexity.
- Security: Sanitize dynamic data in XML to prevent injection.
RSS Example with PHP:
header("Content-Type: application/rss+xml");
$items = ["Post 1", "Post 2"];
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<rss version="2.0"><channel><title>Blog</title>';
foreach ($items as $item) {
echo "<item><title>$item</title></item>";
}
echo '</channel></rss>';