PHP xml_set_end_namespace_decl_handler() Function



The PHP XML Parser xml_set_end_namespace_decl_handler() function is used to create the end namespace declaration handler. This method determines which function should be called when a namespace declaration exits its scope. This will be called for each namespace declaration, after the handler for the element's end tag.

The handler parameter can also be an array containing an object reference and a method name.

Syntax

Below is the syntax of the PHP XML Parser xml_set_end_namespace_decl_handler() function −

true xml_set_end_namespace_decl_handler ( XMLParser $xml_parser, callable|string $handler )

Parameters

Here are the parameters of the xml_set_end_namespace_decl_handler() function −

  • $xml_parser: (Required) It is a reference to the XML parser to free.

  • $handler: (Required) It is used to specifies a function to be used as an event handler.

Return Value

The xml_set_end_namespace_decl_handler() function returns TRUE on success. And FALSE on failure.

PHP Version

First introduced in core PHP 4.0.5, the xml_set_end_namespace_decl_handler() function continues to function easily in PHP 5, PHP 7, and PHP 8.

Example 1

This program shows the basic concepts of the PHP XML Parser xml_set_end_namespace_decl_handler() function by creating a simple callback function that handles end namespace declarations.

<?php
   // Initialize XML parser
   $p = xml_parser_create();

   // Define a simple handler function
   function endNamespaceHandler($p, $prefix) {
      echo "End namespace: $prefix\n";
   }

   // Set the end namespace declaration handler
   xml_set_end_namespace_decl_handler($p, 'endNamespaceHandler');

   // Free the parser
   echo xml_parser_free($p);
?>

Output

Here is the outcome of the following code −

1

Example 2

In the below PHP code we are using the xml_set_end_namespace_decl_handler() function and two namespaces are declared in the XML string. The handler will be triggered two times, one for each namespace, when they end.

<?php
   // Create an XML string
   $xml_string = '<root xmlns:foo="http://tutorialspoint.com/foo" xmlns:bar="http://tutorialspoint.com/bar"><foo:element>Test</foo:element></root>';

   // Create an XML parser
   $p = xml_parser_create();

   // Define a declaration handler
   function end_namespace_decl($p, $prefix) {
      echo "End of namespace: $prefix\n";
   }

   // Set the handler 
   xml_set_end_namespace_decl_handler($p, 'end_namespace_decl');

   // Parse the XML string
   xml_parse($p, $xml_string);
   xml_parser_free($p);
?> 

Output

This will generate the below output −

End of namespace: foo
End of namespace: bar

Example 3

Now the below code uses the xml_set_end_namespace_decl_handler()function and uses additional logic in the last namespace handler. It identifies which namespace is ending and shows different notifications accordingly. The handler checks to see if the namespace foo or bar is about to end. The output is altered according to the namespace, with different messages displayed for each.

<?php
   // Create an XML string
   $xml_string = '<root xmlns:foo="http://tutorialspoint.com/foo" xmlns:bar="http://tutorialspoint.com/bar"><foo:parent><bar:child>Text</bar:child></foo:parent></root>';

   // Create an XML parser
   $p = xml_parser_create();

   // Define an end namespace declaration handler
   function end_namespace_decl($p, $prefix) {
      if ($prefix == 'foo') {
         echo "Ending foo namespace.\n";
      } elseif ($prefix == 'bar') {
         echo "Ending bar namespace.\n";
      }
   }

   // Set the handler for namespace declaration
   xml_set_end_namespace_decl_handler($p, 'end_namespace_decl');

   // Parse the XML string
   xml_parse($p, $xml_string);
   xml_parser_free($p);
?> 

Output

This will create the below output −

Ending foo namespace.
Ending bar namespace.
php_function_reference.htm
Advertisements