xml_parse_into_struct
(PHP 3>= 3.0.8, PHP 4 , PHP 5)
xml_parse_into_struct -- Analisa dados XML dentro de uma estrutura de
array
Descrição
int
xml_parse_into_struct ( resource parser, string data, array &values [, array &index] )
Esta função analisa uma arquivo XML dentro de 2 estruturas de array
paralelas, um (index) contendo indicadores para a
localização dos valores apropriados nos values do
array. Estes dois últimos parâmetros deve ser passados por referência.
Abaixo tem um exemplo que ilustra a estrutura interna dos arrays sendo gerados pela função. Nós usamos uma simples note tag imbutida dentro da
para tag, e quando nós analisamos isto exibe as estruturas geredas:
Análise dirigida por eventos (Event-driven parsing) (baseada
nabiblioteca do expat) pode complicado quando você tem um documento
XML que é complexo. Esta função não produz um objeto no estilo DOM,
mas gera estruturas cômodas de serem organizadas em uma forma de
árvore. Assim, nós podemos criar objetos representando os dados nos
arquivos facilmente. Vamos considerar o seguinte arquivo representando um pequeno banco de dados de informações de aminoácidos:
Exemplo 1. moldb.xml - pequeno banco de dados de informações
moleculares <?xml version="1.0"?>
<moldb>
<molecule>
<name>Alanine</name>
<symbol>ala</symbol>
<code>A</code>
<type>hydrophobic</type>
</molecule>
<molecule>
<name>Lysine</name>
<symbol>lys</symbol>
<code>K</code>
<type>charged</type>
</molecule>
</moldb> |
|
E alguns códigos para analisar o documento e gerar os obejetos
apropriados:
Exemplo 2.
parsemoldb.php - analisa moldb.xml e cria o array dos objetos moleculares
<?php
class AminoAcid { var $name; // aa name var $symbol; // three letter symbol var $code; // one letter code var $type; // hydrophobic, charged or neutral function AminoAcid ($aa) { foreach ($aa as $k=>$v) $this->$k = $aa[$k]; } }
function readDatabase($filename) { // lê o banco de dados XML de aminoácidos $data = implode("", file($filename)); $parser = xml_parser_create(); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, $data, $values, $tags); xml_parser_free($parser);
// loop through the structures foreach ($tags as $key=>$val) { if ($key == "molecule") { $molranges = $val; // each contiguous pair of array entries are the // lower and upper range for each molecule definition for ($i=0; $i < count($molranges); $i+=2) { $offset = $molranges[$i] + 1; $len = $molranges[$i + 1] - $offset; $tdb[] = parseMol(array_slice($values, $offset, $len)); } } else { continue; } } return $tdb; }
function parseMol($mvalues) { for ($i=0; $i < count($mvalues); $i++) $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; return new AminoAcid($mol); }
$db = readDatabase("moldb.xml"); echo "** Database of AminoAcid objects:\n"; print_r($db);
?>
|
|
After executing
parsemoldb.php, a variável
$db contém um array dos objetos de
AminoAcid, e a saída do script confirma isso: