W3docs

simplexml_load_file()

SimpleXML é uma extensão PHP que fornece uma API simples para trabalhar com documentos XML. Saiba como usar simplexml_load_file().

Introdução

simplexml_load_file() lê um arquivo XML do disco (ou de uma URL) e converte seu conteúdo em um objeto SimpleXMLElement que pode ser navegado com propriedades e sintaxe de array comuns do PHP. É o ponto de entrada baseado em arquivo da extensão SimpleXML — a maneira mais simples de transformar um documento XML em algo que você pode percorrer e ler.

Use esta função sempre que tiver um arquivo XML — um arquivo de configuração, um feed RSS/Atom, uma resposta de API salva em disco ou um sitemap — e quiser extrair valores sem precisar escrever um parser manualmente. Se o seu XML estiver em uma string em vez de um arquivo, use a função irmã simplexml_load_string().

Este capítulo cobre a assinatura da função, um exemplo completo e funcional (incluindo o XML que ele lê), como acessar atributos e namespaces, e como lidar com falhas de carregamento de forma elegante.

Sintaxe

simplexml_load_file(
    string $filename,
    ?string $class_name = SimpleXMLElement::class,
    int $options = 0,
    string $namespace_or_prefix = "",
    bool $is_prefix = false
): SimpleXMLElement|false
ParâmetroDescrição
$filenameCaminho ou URL do arquivo XML a ser carregado.
$class_nameClasse a ser instanciada. Deve estender SimpleXMLElement; o padrão é o próprio SimpleXMLElement.
$optionsBitmask de constantes de opção libxml como LIBXML_NOCDATA ou LIBXML_NOBLANKS.
$namespace_or_prefixPrefixo de namespace ou URI para restringir a árvore retornada.
$is_prefixtrue se o argumento anterior for um prefixo, false se for uma URI.

Valor de retorno: um SimpleXMLElement em caso de sucesso, ou false se o arquivo não puder ser lido ou contiver XML malformado.

Um exemplo completo

Suponha que um arquivo chamado books.xml esteja na mesma pasta que seu script:

<?xml version="1.0" encoding="UTF-8"?>
<library>
  <book id="b1">
    <title>The PHP Way</title>
    <author>Jane Doe</author>
    <price currency="USD">29.99</price>
  </book>
  <book id="b2">
    <title>XML in Practice</title>
    <author>John Smith</author>
    <price currency="EUR">24.50</price>
  </book>
</library>

Carregue o arquivo, confirme que foi analisado e itere sobre os elementos <book>:

<?php

$xml = simplexml_load_file('books.xml');

if ($xml === false) {
    echo "Failed to load XML file.\n";
    exit(1);
}

foreach ($xml->book as $book) {
    echo $book->title . " by " . $book->author . "\n";
}

Saída:

The PHP Way by Jane Doe
XML in Practice by John Smith

Observe a comparação estrita com === false. Objetos SimpleXML são "truthy", portanto uma verificação com if (!$xml) pode se comportar de forma inesperada em casos extremos — sempre compare explicitamente com false.

Lendo atributos

O SimpleXML expõe elementos filhos como propriedades de objeto ($book->title) e atributos XML por meio de acesso estilo array ($book['id']). Como os valores são objetos SimpleXMLElement em vez de strings simples, converta-os com (string) antes de usá-los em cálculos ou comparações:

<?php

$xml = simplexml_load_file('books.xml');

foreach ($xml->book as $book) {
    $id       = (string) $book['id'];
    $currency = (string) $book->price['currency'];
    echo "{$id}: {$book->title} — {$book->price} {$currency}\n";
}

Saída:

b1: The PHP Way — 29.99 USD
b2: XML in Practice — 24.50 EUR

Trabalhando com namespaces

Quando um documento declara namespaces XML, o acesso simples por propriedade alcança apenas o namespace padrão. Use ->children($namespaceUri) para acessar um ramo com namespace e ->attributes($namespaceUri) para ler atributos com namespace:

<?php
// Access elements in the Atom namespace.
$atom = $xml->children('http://www.w3.org/2005/Atom');
echo $atom->title;

Para uma visão mais aprofundada sobre namespaces e travessia, consulte SimpleXML no PHP.

Lidando com falhas de carregamento de forma elegante

Por padrão, XML malformado emite avisos do PHP. Para suprimi-los e inspecionar os erros você mesmo, ative o tratamento interno de erros com libxml_use_internal_errors() antes de carregar:

<?php

libxml_use_internal_errors(true);

$xml = simplexml_load_file('missing.xml');

if ($xml === false) {
    echo "Could not load the file:\n";
    foreach (libxml_get_errors() as $error) {
        echo "  " . trim($error->message) . "\n";
    }
    libxml_clear_errors();
}

Saída:

Could not load the file:
  failed to load external entity "missing.xml"

Esse padrão mantém sua saída limpa e fornece acesso estruturado a cada erro de análise por meio de libxml_get_errors().

Armadilhas comuns

  • false vs. aviso. Um arquivo ausente ou um erro de sintaxe retorna false e emite um aviso, a menos que você ative os erros internos. Sempre verifique o valor de retorno.
  • Converter antes de comparar. $book->price == 29.99 funciona por coincidência; (float) $book->price === 29.99 é o que você realmente quer.
  • Lendo arquivos remotos. $filename pode ser uma URL, mas isso requer que allow_url_fopen esteja habilitado no php.ini.
  • Escrevendo de volta. SimpleXML é ótimo para leitura. Para serializar um elemento de volta para uma string XML, chame asXML().

Conclusão

simplexml_load_file() é a maneira mais rápida de carregar um arquivo XML em uma árvore de objetos navegável no PHP. Combine-a com verificações estritas de === false, conversões com (string) ao ler valores e tratamento de erros com libxml, e você terá uma base robusta para consumir feeds, configurações e APIs XML. Para entrada em string, use simplexml_load_string(), e para técnicas completas de travessia, continue com SimpleXML no PHP.

Prática

Prática
Qual é o propósito da função SimpleXML_Load_File no PHP?
Qual é o propósito da função SimpleXML_Load_File no PHP?
Was this page helpful?