Manipulando XML com o XPATH do SIMPLE_XML no PHP

php-xml

O PHP possui muitas maneiras de se trabalhar com XML (eu diria que até mais que o suficiente), mas a que vamos abordar aqui é manipular XML com o XPATH do SIMPLE_XML, antes de tudo você precisa levar em consideração que para manipular um xml com PHP é preciso ter instalada a extensão libxml.

Manipular um xml com xpath é tão fácil quanto digitar o caminho até o nó como se fosse uma url, vamos tomar como exemplo o xml abaixo:

$xml = <<<MEUXML
<biblioteca>
    <armario identificador="A">
        <livro id="1">
            <nome>PHP 1</nome>
            <descricao>Teste PHP1</descricao>
        </livro>
        <livro id="2">
            <nome>PHP 2</nome>
            <descricao>Teste PHP2</descricao>
        </livro>
    </armario>
    <armario identificador="B">
        <livro id="2">
            <nome>PHP 3</nome>
            <descricao>Teste PHP3</descricao>
        </livro>
    </armario>
</biblioteca>
MEUXML;

Para acessar os nós desse xml, primeiro devemos ter em mente a seguinte tabelinha:

Elemento Descrição
/ Começa a busca a partir do nó raiz
// Busca o elemento desejado, não importa onde esteja
@ Usado para achar atributos

 

Agora note a simplicidade dessa maneira de buscarmos um nó, primeiro carregamos a string utilizando simplexml_load_string (se fosse um arquivo usaria simplexml_load_file):

$xml = simplexml_load_string($xml);

Agora imagine que precisamos pegar todos os livros, seria muito fácil veja.

$elementos = $xml->xpath('//livro');
print_r($elementos);

Resultado:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 1
                )

            [nome] => PHP 1
            [descricao] => Teste PHP1
        )

    [1] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 2
                )

            [nome] => PHP 2
            [descricao] => Teste PHP2
        )

    [2] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 2
                )

            [nome] => PHP 3
            [descricao] => Teste PHP3
        )

)

Como pode ver nós recuperamos todos os nós “livros”, mas e se quiséssemos trazer apenas os livros de id = 1? Muito simples.

$elementos = $xml->xpath('//livro[@id="1"]');
print_r($elementos);

Resultado:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 1
                )

            [nome] => PHP 1
            [descricao] => Teste PHP1
        )

)

Bom, como dito no começo do post esta é apenas uma das maneiras de se “navegar” por um xml, outro exemplo disso seria utilizando DOMDOCUMENT, se quiser se aprofundar mais neste assunto dê uma olhada na documentação em php.net, lá você vai encontrar uma das fontes mais completas sobre o tema.