Aprenda sobre a extensão SimpleXML incluída no PHP versão 5, que permite que páginas PHP consultem, pesquisem, modifiquem e republicem XML em sintaxe amigável ao PHP.
A versão 5 do PHP apresenta SimpleXML, uma nova interface de programação de aplicativos (API) para leitura e gravação de XML. No SimpleXML, a seguinte expressão:
$doc->rss->channel->item->title
Selecione elementos do documento. Esta expressão é fácil de escrever, desde que você esteja familiarizado com a estrutura do documento. No entanto, se não estiver claro onde os elementos necessários aparecem (como em Docbooks, HTML e documentos narrativos semelhantes), o SimpleXML pode usar expressões XPath para localizar esses elementos.
Introdução ao SimpleXML
Suponha que você precise de uma página PHP para converter um feed RSS em HTML. RSS é um formato XML simples para publicação de conteúdo vinculado. O elemento raiz do documento é rss, que contém um elemento de canal. O elemento channel contém metadados sobre o feed, como título, idioma e URL. Ele também contém vários relatórios encapsulados no elemento item. Cada item possui um elemento de link, que contém uma URL, e um título ou descrição (geralmente ambos), que contém texto simples. Nenhum namespace é usado. Certamente há mais no RSS do que isso, mas isso é o suficiente para este artigo. A Listagem 1 mostra um exemplo típico, que contém duas notícias.
Listagem 1. Feed RSS
<?xml version="1.0" encoding="UTF-8"?>
<rss versão="0.92">
<canal>
<title>Mokka com Schlag</title>
<link>http://www.elharo.com/blog</link>
<idioma>pt</idioma>
<item>
<title>Penn Station: Desaparecida, mas não esquecida</title>
<descrição>
A antiga Penn Station em Nova York foi demolida antes de eu nascer.
Olhando para essas fotos, parece um erro. O site atual é.
funcional, mas nada mais; na verdade, apenas algumas torres de escritórios e subterrâneos;
corredores sem interesse ou beleza particular. A nova Madison Square...
</descrição>
<link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station</link>
</item>
<item>
<title>Pessoal de Elliotte Harold</title>
<description>Algumas pessoas usam filtros de spam muito desagradáveis que exigem que você
para digitar alguma string aleatória em seu assunto, como E37T, para passar.
Escusado será dizer que nem eu nem a maioria das outras pessoas nos preocupamos em comunicar com
esses paranóicos estão reagindo de forma exagerada ao problema do spam.
Pessoalmente não vou...</description>
<link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/</link>
</item>
</canal>
</rss>
Vamos desenvolver uma página PHP para formatar um feed RSS em HTML. A Listagem 2 mostra a estrutura básica desta página.
Listagem 2. Estrutura estática do código PHP
<?php // Carrega e analisa o documento XML ?>
<html xml:lang="en" lang="en">
<cabeça>
<title><?php // O título será lido no RSS ?></title>
</head>
<body>
<h1><?php // O título será lido novamente no RSS ?></h1>
<?php
// Aqui colocaremos um loop para incluir o título e a descrição de cada item
?>
</body>
</html>
Analisando um documento XML
A primeira etapa é analisar o documento XML e salvá-lo em uma variável. Basta uma linha de código, passando uma URL para a função simplexml_load_file():
$rss = simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
Para este exemplo, preenchi a página do feed do New York Times da Userland (em http://partners.userland.com/nytRss/nytHomepage.xml ). Claro, qualquer URL para outro feed RSS também pode ser usado.
Observe que embora o nome seja simplexml_load_file(), esta função na verdade analisa um documento XML em uma URL HTTP remota. Mas essa não é a única coisa estranha sobre esta função. O valor de retorno (aqui armazenado na variável $rss) não aponta para o documento inteiro, como seria de esperar se você tivesse usado outras APIs, como o Document Object Model (DOM). Em vez disso, aponta para o elemento raiz do documento. O conteúdo do prólogo e do epílogo do documento não pode ser acessado no SimpleXML.
Encontre o título do feed
O título de todo o feed (não os títulos das histórias individuais no feed) está localizado no título filho do canal do elemento raiz rss. É fácil encontrar o título como se o documento XML fosse uma forma serializada de um objeto da classe rss, com seu próprio campo de canal tendo um campo de título. Usando a sintaxe normal de referência de objeto PHP, a instrução para encontrar o título é a seguinte:
$title = $rss->channel->title;
Uma vez encontrado, ele pode ser adicionado ao HTML de saída. Fazer isso é fácil, basta repetir a variável $title:
<title><?php echo $title ?></title>;
Esta linha gera o valor da string do elemento em vez do elemento inteiro. Ou seja, o conteúdo do texto está escrito, mas as tags não estão incluídas.
Você pode até pular completamente a variável intermediária $title:
<title><?php echo $rss->channel->title ?></title>;
Como a página reutiliza esse valor em vários lugares, acho mais conveniente armazená-lo em uma variável com significado claro.
…