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

PHP xml_parse_into_struct() Function



The PHP XML Parser xml_parse_into_struct() function is a built-in PHP function that parses XML data into an array structure. The XML data is parsed into two parallel array structures: an index array, which holds pointers to the values' locations in the value array, and a value array, which contains the processed XML data itself.

This technique is particularly useful for converting XML data into a format that PHP can easily handle. It uses an XML parser resource to arrange the data in a hierarchical manner by identifying element names, properties, and values. This makes it suitable for analyzing or changing XML text programmatically.

Syntax

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

int xml_parse_into_struct(
   XMLParser $p,
   string $data,
   array &$values,
   array &$index = null
)

Parameters

Here are the parameters of the xml_parse_into_struct() function −

  • $p: (Required) It is used to specifies XML parser to use.

  • $data: (Required) It is used to specifies XML data to parse.

  • $values: (Required) It is used to specifies the target array for the XML data.

  • $index: (Optional) It is used to specifies the target array for index data.

Return Value

The xml_parse_into_struct() function returns 0 if it fails, 1 if it succeeds. This is not the same as FALSE and TRUE; be cautious with operators like ===.

PHP Version

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

Example 1

This PHP script shows how to parse an XML text and extract its structure using the PHP XML Parser xml_parse_into_struct() function. It defines an XML string, creates a parser, and splits the XML data into two arrays: one for element values and another for element indices.

<?php
   $local = "<para><note>simple note</note></para>";
   $p = xml_parser_create();

   xml_parse_into_struct($p, $local, $vals, $index);
   xml_parser_free($p);

   echo "Index array is \n";
   print_r($index);

   echo "\nVals array\n";
   print_r($vals);
?>

This will produce following result −

Index array Array is ( [PARA] => Array ( [0] => 0 [1] => 2 ) [NOTE] => Array ([0] => 1 ) ) Vals array Array ( 
[0] => Array ( [tag] => PARA [type] => open [level] => 1 ) 
[1] => Array ( [tag] => NOTE [type] => complete [level] => 2 [value] => simple note ) 
[2] => Array ( [tag] => PARA [type] => close [level] => 1 ) )

Example 2

This program shows how to use xml_parse_into_struct() function to parse simple XML data and save it as an array. The code creates an XML parser (xml_parser_create) and then splits a simple XML text into two arrays: $values and $index.

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

   // XML data to parse
   $xmlData = "<note><to>Tina</to><from>Sharma</from><message>Hello!</message></note>";

   // Arrays to hold the parsed values and index
   $values = [];
   $index = [];

   // Parse XML into arrays
   if (xml_parse_into_struct($p, $xmlData, $values, $index)) {
      
      // Parsed XML data
      print_r($values); 
      
      // Index structure
      print_r($index);  
   } else {
      echo "Parsing failed.";
   }

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

Output

This will generate the below output −

Array
(
   [0] => Array
      (
         [tag] => NOTE
         [type] => open
         [level] => 1
      )
   [1] => Array
      (
         [tag] => TO
         [type] => complete
         [level] => 2
         [value] => Tina
      )
   [2] => Array
      (
         [tag] => FROM
         [type] => complete
         [level] => 2
         [value] => Sharma
      )
   [3] => Array
      (
         [tag] => MESSAGE
         [type] => complete
         [level] => 2
         [value] => Hello!
      )
   [4] => Array
      (
         [tag] => NOTE
         [type] => close
         [level] => 1
      )

)
Array
(
   [NOTE] => Array
      (
         [0] => 0
         [1] => 4
      )
   [TO] => Array
      (
         [0] => 1
      )
   [FROM] => Array
      (
         [0] => 2
      )
   [MESSAGE] => Array
      (
         [0] => 3
      )
)

Example 3

Now in the below code we will handle nested XML structure. This program basically parses a nested XML structure using the xml_parse_into_struct() function and shows how the values array shows the hierarchy.

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

   // Nested XML data
   $xmlData = "<library><book><title>PHP Guide</title></book><book><title>XML Handbook</title></book></library>";

   // Arrays for parsed data
   $values = [];
   $index = [];

   // Parse XML into arrays
   if (xml_parse_into_struct($p, $xmlData, $values, $index)) {
      
      // Display structured XML data
      print_r($values); 
      
      // Show index mapping
      print_r($index);  
   } else {
      echo "Parsing failed.";
   }

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

Output

This will create the below output −

Array
(
   [0] => Array
      (
         [tag] => LIBRARY
         [type] => open
         [level] => 1
      )
   [1] => Array
      (
         [tag] => BOOK
         [type] => open
         [level] => 2
      )
   [2] => Array
      (
         [tag] => TITLE
         [type] => complete
         [level] => 3
         [value] => PHP Guide
      )
   [3] => Array
      (
         [tag] => BOOK
         [type] => close
         [level] => 2
      )
   [4] => Array
      (
         [tag] => BOOK
         [type] => open
         [level] => 2
      )
   [5] => Array
      (
         [tag] => TITLE
         [type] => complete
         [level] => 3
         [value] => XML Handbook
      )
   [6] => Array
      (
         [tag] => BOOK
         [type] => close
         [level] => 2
      )
   [7] => Array
      (
         [tag] => LIBRARY
         [type] => close
         [level] => 1
      )
)
Array
(
   [LIBRARY] => Array
      (
         [0] => 0
         [1] => 7
      )
   [BOOK] => Array
      (
         [0] => 1
         [1] => 3
         [2] => 4
         [3] => 6
      )
   [TITLE] => Array
      (
         [0] => 2
         [1] => 5
      )
)
php_function_reference.htm
Advertisements