simplexml_load_string()
SimpleXML é uma extensão PHP que fornece uma API simples para trabalhar com documentos XML. Aprenda a usar simplexml_load_string() em detalhes.
Introdução
SimpleXML é uma extensão PHP que fornece uma API simples e fácil de usar para trabalhar com documentos XML. A função simplexml_load_string() é uma das muitas funções que o SimpleXML oferece para trabalhar com documentos XML. É uma ferramenta poderosa que pode ser usada para carregar um documento XML a partir de uma string e criar um objeto SimpleXMLElement. Neste artigo, discutiremos a função simplexml_load_string() em detalhes e como ela pode ser usada em PHP.
Entendendo a função simplexml_load_string()
A função simplexml_load_string() em PHP carrega um documento XML a partir de uma string e cria um objeto SimpleXMLElement. (Nota: Esta é a abordagem procedural; o equivalente orientado a objetos é new SimpleXMLElement($string).) A sintaxe para usar a função simplexml_load_string() é a seguinte:
Sintaxe
simplexml_load_string ( string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] ) : SimpleXMLElementAqui, $data é a string contendo o documento XML a ser carregado. $class_name é um parâmetro opcional que especifica o nome da classe a ser usada para o objeto SimpleXMLElement. $options é um parâmetro opcional que especifica opções adicionais para carregar o documento XML. $ns é um parâmetro opcional que especifica o namespace a ser usado para o documento XML. $is_prefix é um parâmetro opcional que especifica se o namespace é um prefixo.
Exemplo de Uso
Vamos ver um exemplo para entender o uso da função simplexml_load_string() em PHP:
Exemplo de uso da função simplexml_load_string() em PHP
No exemplo acima, primeiro criamos uma string contendo um documento XML. Em seguida, usamos a função simplexml_load_string() para carregar o documento XML a partir da string e criar um objeto SimpleXMLElement. Usamos um loop foreach para iterar sobre cada elemento book no documento XML e imprimir o título de cada livro.
Se o seu XML vem de um arquivo ou URL em vez de uma string, use simplexml_load_file().
Lendo atributos
Os atributos XML são acessados com sintaxe de array ($element['attrName']), enquanto os elementos filhos usam sintaxe de propriedade ($element->child). Este é o erro mais comum para iniciantes:
<?php
$xmlString = '<books><book id="1"><title>PHP Basics</title></book></books>';
$xml = simplexml_load_string($xmlString);
foreach ($xml->book as $book) {
echo "ID: " . $book['id'] . " - Title: " . $book->title . "\n";
}Isto imprime ID: 1 - Title: PHP Basics. Note que os valores dos atributos são eles próprios objetos SimpleXMLElement, portanto converta-os com (string) ou (int) se precisar de um escalar simples.
Usando o parâmetro options
O terceiro parâmetro aceita constantes de opção libxml que alteram como o documento é analisado. Uma muito usada é LIBXML_NOCDATA, que mescla seções CDATA em nós de texto simples para que você possa lê-los como conteúdo comum:
<?php
$xmlString = '<note><body><![CDATA[Hello <b>world</b>]]></body></note>';
$xml = simplexml_load_string($xmlString, "SimpleXMLElement", LIBXML_NOCDATA);
echo (string) $xml->body . "\n";Sem LIBXML_NOCDATA, $xml->body ficaria vazio quando acessado como string porque o conteúdo está em um nó CDATA.
Tratamento de Erros
Por padrão, simplexml_load_string() emitirá avisos se o XML estiver malformado. Para tratar erros de forma elegante, você pode usar libxml_use_internal_errors():
<?php
$xmlString = '<books><book><title>PHP Basics</title></books>'; // Missing closing </book> tag
libxml_use_internal_errors(true);
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
foreach (libxml_get_errors() as $error) {
echo "Error: ", trim($error->message), "\n";
}
} else {
foreach($xml->book as $book) {
echo $book->title . "\n";
}
}Quando o XML é inválido, simplexml_load_string() retorna false em vez de lançar uma exceção. Chamar libxml_use_internal_errors(true) suprime os avisos padrão e permite inspecionar os erros coletados com libxml_get_errors(). Sempre verifique se o resultado é false antes de usá-lo.
Conclusão
simplexml_load_string() analisa uma string XML em um objeto SimpleXMLElement, fornecendo acesso no estilo de objeto aos elementos filhos ($xml->child) e acesso no estilo de array aos atributos ($xml['attr']). Use-a quando o XML já está na memória; use simplexml_load_file() quando estiver em um arquivo ou URL. Para código robusto, habilite os erros internos do libxml e verifique o valor de retorno antes de ler o resultado. Para se aprofundar na API SimpleXML, consulte a visão geral do SimpleXML.