PHP xml_set_object() Function
The PHP XML Parser xml_set_object() function is used in XML parsing to link an object to an XML parser. This allows the object to control parser-triggered events, like an element's start or end.
When you call xml_set_object() the object you provide becomes the context for the event handler functions (such as startElement or endElement). This is very helpful when working with object-oriented programs since it allows your class functions to handle XML parsing events.
Since PHP 8.4.0, this function has been DEPRECATED. It is strongly discouraged to rely on this function.
Syntax
Below is the syntax of the PHP XML Parser xml_set_object() function −
true xml_set_object(XMLParser $parser, object $object)
Parameters
Here are the parameters of the xml_set_object() function −
$string: (Required) It is a reference to an XML parser to use within the object.
$separator: (Required) It is the specific object where to use the XML parser.
Return Value
The xml_set_object() function returns TRUE on success. And FALSE on failure.
PHP Version
First introduced in core PHP 4, the xml_set_object() function continues to function easily in PHP 5, PHP 7, and PHP 8.
Example 1
First we will show you the basic example of the PHP XML Parser xml_set_object() function to connect the XML parser ($this->parser) to the object of the MyXMLParser class. This makes it possible to use the class methods tag_open, cdata, and tag_close to handle XML parsing events.
<?php
// Define a XML parser class
class MyXMLParser
{
private $parser;
function __construct()
{
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "tag_open", "tag_close");
xml_set_character_data_handler($this->parser, "cdata");
}
function parse($data)
{
xml_parse($this->parser, $data);
}
function tag_open($parser, $tag, $attributes)
{
var_dump($tag, $attributes);
}
function cdata($parser, $cdata)
{
var_dump($cdata);
}
function tag_close($parser, $tag)
{
var_dump($tag);
}
}
$xml_parser = new MyXMLParser();
$xml_parser->parse("<T ID='hello'>PHP Programming</T>");
?>
Output
Here is the outcome of the following code −
string(1) "T"
array(1) {
["ID"]=>
string(5) "hello"
}
string(15) "PHP Programming"
string(1) "T"
Example 2
Here is another example of how the xml_set_object() function can be used in a class to handle XML parsing. The methods startTag, endTag, and characterData handle events linked to opening tags, closing tags, and text data, respectively. The handlers process each part of the XML and produce information about the data, tags, and attributes after parsing the example XML data.
<?php
class BookXMLParser
{
private $parser;
function __construct()
{
// Create an XML parser
$this->parser = xml_parser_create();
// Associate this object with the parser
xml_set_object($this->parser, $this);
// Set up handlers for XML events
xml_set_element_handler($this->parser, "startTag", "endTag");
xml_set_character_data_handler($this->parser, "characterData");
}
function parse($xmlData)
{
// Parse the XML data
if (!xml_parse($this->parser, $xmlData)) {
echo "Error: " . xml_error_string(xml_get_error_code($this->parser));
}
}
function startTag($parser, $tag, $attributes)
{
echo "Start Tag: $tag\n";
if (!empty($attributes)) {
echo "Attributes: " . print_r($attributes, true) . "\n";
}
}
function endTag($parser, $tag)
{
echo "End Tag: $tag\n";
}
function characterData($parser, $data)
{
// Ignore whitespace or empty data
$data = trim($data);
if (!empty($data)) {
echo "Character Data: $data\n";
}
}
}
// Sample XML data
$xmlData = <<<XML
<books>
<book id="1">
<title>Learning PHP</title>
<author>John Doe</author>
</book>
<book id="2">
<title>Mastering XML</title>
<author>Jane Smith</author>
</book>
</books>
XML;
// Create and use the parser
$bookParser = new BookXMLParser();
$bookParser->parse($xmlData);
?>
Output
This will generate the below output −
Start Tag: BOOKS Start Tag: BOOK Attributes: Array ( [ID] => 1 ) Start Tag: TITLE Character Data: Learning PHP End Tag: TITLE Start Tag: AUTHOR Character Data: John Doe End Tag: AUTHOR End Tag: BOOK Start Tag: BOOK Attributes: Array ( [ID] => 2 ) Start Tag: TITLE Character Data: Mastering XML End Tag: TITLE Start Tag: AUTHOR Character Data: Jane Smith End Tag: AUTHOR End Tag: BOOK End Tag: BOOKS