Muitos exemplos vistos aqui requerem uma string XML. Ao invés de ficar repetindo esta string em cada exemplo, vamos colocá-la em um arquivo que iremos incluir em cada exemplo. Este arquivo é mostrado no exemplo a seguir. Porém, você pode criar um document XML e lê-lo utilizando simplexml_load_file().
Exemplo #1 Arquivo example.php com uma string XML
<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El ActÓr</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
</plot>
<great-lines>
<line>PHP solves all my web problems</line>
</great-lines>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;
?>
A simplicidade do SimpleXML aparece mais claramente quando extraímos uma string ou um número de um documento XML básico.
Exemplo #2 Getting <plot>
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
echo $xml->movie[0]->plot; // "So this language. It's like..."
?>
A tarefa de acessar elementos de dentro de um documento XML que contêm caracteres não permitidos pela a convenção de nomes do PHP (por exemplo, o hífen) pode ser feita encapsulando o elemento com chaves e apóstrofos.
Exemplo #3 Obtendo <line>
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
echo $xml->movie->{'great-lines'}->line; // "PHP solves all my web problems"
?>
Exemplo #4 Acessando elementos não-únicos no SimpleXML
Caso existam nós filhos com nomes iguais dentro de um mesmo nó pai, aplica-se a iteração normal.
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
/* For each <movie> node, we echo a separate <plot>. */
foreach ($xml->movie as $movie) {
echo $movie->plot, '<br />';
}
?>
Exemplo #5 Utilizando atributos
Até agora, só cobrimos o trabalho de ler o nome dos elementos e os seus valores. SimpleXML pode também acessar o atributo dos elementos. Acessar os atributos de um elemento é tão simples quando acessar os atributos de uma array.
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
/* Access the <rating> nodes of the first movie.
* Output the rating scale, too. */
foreach ($xml->movie[0]->rating as $rating) {
switch((string) $rating['type']) { // Get attributes as element indices
case 'thumbs':
echo $rating, ' thumbs up';
break;
case 'stars':
echo $rating, ' stars';
break;
}
}
?>
Exemplo #6 Comparando elementos e atributos com texto
Para comparar um elemento ou atributo com uma string ou passar para uma função que requer uma string, você deve converter para uma string utilizando (string). De outra forma, o PHP irá tratar este elemento como um objeto.
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
if ((string) $xml->movie->title == 'PHP: Behind the Parser') {
print 'My favorite movie.';
}
htmlentities((string) $xml->movie->title);
?>
Exemplo #7 Utilizando XPath
SimpleXML possui suporte a XPath embutido. Para encontrar todos os elementos <character>:
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
foreach ($xml->xpath('//character') as $character) {
echo $character->name, 'played by ', $character->actor, '<br />';
}
?>
'//' serve como uma wildcard. Para especificar um caminho absoluto, basta omitir uma das barras.
Exemplo #8 Atribuindo valores
Dados no SimpleXML não precisam ser constantes, necessariamente. O objeto permite a manipulação de todos os seus elementos.
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
$xml->movie[0]->characters->character[0]->name = 'Miss Coder';
echo $xml->asXML();
?>
O código acima irá mostrar um novo documento XML, como o original, exceto que o novo irá trocar Ms. Coder por Miss Coder.
Exemplo #9 Adicionando elementos e atributos
Desde o PHP 5.1.3, SimpleXML possui a habilidade de adicionar atributos e nós filhos facilmente.
<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);
$character = $xml->movie[0]->characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $xml->movie[0]->addChild('rating', 'PG');
$rating->addAttribute('type', 'mpaa');
echo $xml->asXML();
?>
O código acima irá mostrar um documento XML baseado no original, mas contendo um novo personagem e um novo rating.
Exemplo #10 Interoperabilidade DOM
PHP possui um mecanismo para converter nós XML entre os formatos SimpleXML e DOM. Este exemplo mostra como mudar um elemento DOM para SimpleXML.
<?php
$dom = new domDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Error while parsing the document';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title;
?>