PHP | Función xml_parse_into_struct()

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
 

Publicación traducida automáticamente

Artículo escrito por gekcho y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *