La función xml_parse_into_struct() es una función incorporada en PHP que se utiliza para analizar datos XML en una estructura de array. Los datos XML se analizan en dos estructuras de array paralelas, la primera es una array de índice que contiene punteros a la ubicación de los valores en la array de valores y la segunda es una array de valores que contiene los datos del XML analizado.
Sintaxis:
int xml_parse_into_struct( resource $xml_parser, string $data, array $values, array $index )
Parámetros: esta función acepta cuatro parámetros, como se mencionó anteriormente y se describe a continuación:
- $xml_parser: Es un parámetro obligatorio. Contiene la referencia del analizador XML.
- $datos: Es un parámetro requerido. Contiene la string que contiene datos XML.
- $valores: Es un parámetro requerido. Contiene la array que contiene los valores de los datos XML.
- $índice: Es un parámetro opcional. Especifica una array con punteros a la ubicación de los valores en $valores.
Valor de retorno: esta función devuelve 1 en caso de éxito y 0 en caso de error. No es lo mismo que Verdadero y Falso.
Nota:
- Esta función está disponible para PHP 4.0.0 y versiones posteriores.
- Es posible que estos ejemplos no funcionen en IDE en línea. Por lo tanto, intente ejecutarlo en un servidor local o en servidores alojados en php.
Archivo gfg.xml:
XML
<?xml version="1.0" encoding="utf-8"?> <user> <username> user123 </username> <name> firstname lastname </name> <phone> +91-9876543210 </phone> <detail> I am John Doe. Live in Kolkata, India. </detail> </user>
Programa 1:
PHP
<?php // Create an xml parser $xml_parser = xml_parser_create(); // Opening xml file in file stream $filePointer = fopen("sample.xml", "r"); // Reading XML data from the // specified XML file $xml_data = fread($filePointer, 4096); // Parsing XML data into an // array structure xml_parse_into_struct($xml_parser, $xml_data, $values); // Free to xml parse xml_parser_free($xml_parser); // Display array structured XML data print_r($values); // Closing the XML file fclose($filePointer); ?>
Producción:
Array ( [0] => Array ( [tag] => USER [type] => open [level] => 1 [value] => ) [1] => Array ( [tag] => USERNAME [type] => complete [level] => 2 [value] => user123 ) [2] => Array ( [tag] => USER [value] => [type] => cdata [level] => 1 ) [3] => Array ( [tag] => NAME [type] => complete [level] => 2 [value] => firstname lastname ) [4] => Array ( [tag] => USER [value] => [type] => cdata [level] => 1 ) [5] => Array ( [tag] => PHONE [type] => complete [level] => 2 [value] => +91-9876543210 ) [6] => Array ( [tag] => USER [value] => [type] => cdata [level] => 1 ) [7] => Array ( [tag] => DETAIL [type] => complete [level] => 2 [value] => I am John Doe. Live in Kolkata, India. ) [8] => Array ( [tag] => USER [value] => [type] => cdata [level] => 1 ) [9] => Array ( [tag] => USER [type] => close [level] => 1 ) )
archivo geeks.xml:
XML
<?xml version="1.0"?> <atoms> <atom> <name>Carbon</name> <symbol>C</symbol> <atomic_no>6</atomic_no> </atom> <atom> <name>Hydrogen</name> <symbol>H</symbol> <atomic_no>1</atomic_no> </atom> <atom> <name>Helium</name> <symbol>He</symbol> <atomic_no>2</atomic_no> </atom> <atom> <name>Iron</name> <symbol>Fe</symbol> <atomic_no>26</atomic_no> </atom> </atoms>
Programa 2:
PHP
<?php class Atom { var $name; // Name of the element var $symbol; // Symbol for the atom var $atomic_no; // Atomic number // Constructor for Atom class function __construct( $aa ) { // Initializing or setting the values // to the field of the Atom class foreach ($aa as $k=>$v) $this->$k = $aa[$k]; } } function read_data($filename) { // Read the XML database of atoms $xml_data = implode("", file($filename)); // Creating an xml parser $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($xml_parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($xml_parser, $xml_data, $values, $tags); // Free to xml parser xml_parser_free($xml_parser); // Iterating through the structures foreach ($tags as $key=>$val) { if ($key == "atom") { $atom_ranges = $val; // Each contiguous pair of array entries // are the lower and upper range for // each molecule definition for($i = 0; $i < count($atom_ranges); $i += 2) { $offset = $atom_ranges[$i] + 1; $len = $atom_ranges[$i + 1] - $offset; // Parsing atom data $tdb[] = parseAtoms(array_slice($values, $offset, $len)); } } else { continue; } } return $tdb; } // parseAtoms function to parse atom function parseAtoms($mvalues) { for ($i = 0; $i < count($mvalues); $i++) { $ato[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; } return new Atom($ato); } $db = read_data("atoms.xml"); echo "Database of atoms objects:\n"; print_r($db); ?>
Producción:
Database of atoms objects: Array ( [0] => Atom Object ( [name] => Carbon [symbol] => C [atomic_no] => 6 ) [1] => Atom Object ( [name] => Hydrogen [symbol] => H [atomic_no] => 1 ) [2] => Atom Object ( [name] => Helium [symbol] => He [atomic_no] => 2 ) [3] => Atom Object ( [name] => Iron [symbol] => Fe [atomic_no] => 26 ) )
Referencia: https://www.php.net/manual/en/function.xml-parse-into-struct.php