Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

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
php_function_reference.htm
Advertisements