A classe SimpleXMLElement (PHP 5, PHP 7)

Representa um elemento em um documento XML.

Sinopse da classe

SimpleXMLElement implements {
/* Métodos */
final public ( string $data [, int $options = 0 [, bool $data_is_url = false [, string $ns = "" [, bool $is_prefix = false ]]]] )
public ( string $name [, string $value [, string $namespace ]] ) : void
public ( string $name [, string $value [, string $namespace ]] ) :
public ([ string $filename ] ) :
public ([ string $ns = NULL [, bool $is_prefix = false ]] ) :
public ([ string $ns [, bool $is_prefix = false ]] ) :
public ( ) : int
public ([ bool $recursive = false [, bool $from_root = true ]] ) : array
public ( ) : string
public ([ bool $recursive = false ] ) : array
public ( string $prefix , string $ns ) : bool
public ( ) : string
public ( string $path ) : array
}

SimpleXMLElement::addAttribute

(PHP 5 >= 5.1.3, PHP 7)

SimpleXMLElement::addAttributeAdiciona um atributo a elemento SimpleXML

Descrição

public SimpleXMLElement::addAttribute ( string $name [, string $value [, string $namespace ]] ) : void

Adiciona um atributo à elemento SimpleXML

Parâmetros

name

O nome do atributo a ser adicionado.

value

O valor do atributo.

namespace

Se especificado, diz a qual namespace o atributo pertence.

Valor Retornado

Não há valor retornado.

Exemplos

Nota:

Os exemplos listados podem incluir o arquivo example.php, que referem-se a uma string XML encontrada no primeiro exemplo do guia de .

Exemplo #1 Adiciona atributos e filhos à um elemento SimpleXML

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');

$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');

$characters = $movie->addChild('characters');
$character  = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');

echo 
$sxe->asXML();

?>

O exemplo acima irá imprimir algo similar à:

<?xml version="1.0" standalone="yes"?>
<movies type="documentary">
 <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&#xD3;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>
 <movie>
  <title>PHP2: More Parser Stories</title>
  <plot>This is all about the people who make it work.</plot>
  <characters>
   <character>
    <name>Mr. Parser</name>
    <actor>John Doe</actor>
   </character>
  </characters>
  <rating type="stars">5</rating>
 </movie>
</movies>

Veja Também



SimpleXMLElement::addChild

(PHP 5 >= 5.1.3, PHP 7)

SimpleXMLElement::addChildAdiciona um elemento filho à um nó XML

Descrição

public SimpleXMLElement::addChild ( string $name [, string $value [, string $namespace ]] ) :

Adiciona um elemento filho ao nó e retorna um elemento SimpleXML do nó filho.

Parâmetros

name

O nome do elemento filho à ser adicionado.

value

Se especificado, o valor do elemento filho.

namespace

Se especificado, o namespace ao qual o elemento filho pertence.

Valor Retornado

O método addChild retorna um objeto representando o filho adicionado ao nó XML.

Exemplos

Nota:

Os exemplos listados podem incluir o arquivo example.php, que referem-se a uma string XML encontrada no primeiro exemplo do guia de .

Exemplo #1 Adiciona atributos e filhos à um elemento SimpleXML

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');

$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');

$characters = $movie->addChild('characters');
$character  = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');

echo 
$sxe->asXML();

?>

O exemplo acima irá imprimir algo similar à:

<?xml version="1.0" standalone="yes"?>
<movies type="documentary">
 <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&#xD3;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>
 <movie>
  <title>PHP2: More Parser Stories</title>
  <plot>This is all about the people who make it work.</plot>
  <characters>
   <character>
    <name>Mr. Parser</name>
    <actor>John Doe</actor>
   </character>
  </characters>
  <rating type="stars">5</rating>
 </movie>
</movies>

Veja Também



SimpleXMLElement::asXML

(PHP 5, PHP 7)

SimpleXMLElement::asXMLRetorna uma string XML bem formada (well-formed) baseada em um elemento SimpleXML

Descrição

public SimpleXMLElement::asXML ([ string $filename ] ) :

O método asXML formata os dados dos objetos pais em XML de versão 1.0.

Parâmetros

filename

Se especificado, a função escreve os dados em um arquivo ao invés de retorná-lo.

Valor Retornado

Se o filename não for especificado, esta função retornará uma string no caso de sucesso, e FALSE no caso de erro. Se o parâmetro for especificado, retornará TRUE se o arquivo for escrito com sucesso, e FALSE caso contrário.

Exemplos

Exemplo #1 Recuperando o XML

<?php
$string 
= <<<XML
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <d>
  <c>code</c>
 </d>
</a>
XML;

$xml = new SimpleXMLElement($string);

echo 
$xml->asXML(); // <?xml ... <a><b><c>text</c><c>stuff</c> ...

?>

O exemplo acima irá imprimir:

<?xml version="1.0"?>
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <d>
  <c>code</c>
 </d>
</a>

O método asXML também funcionará em resultados Xpath:

Exemplo #2 Utilizando asXML() em resultados

<?php
// Continued from example XML above.

/* Search for <a><b><c> */
$result = $xml->xpath('/a/b/c');

while(list( , 
$node) = each($result)) {
    echo 
$node->asXML(); // <c>text</c> and <c>stuff</c>
}
?>

O exemplo acima irá imprimir:

<c>text</c><c>stuff</c>

Veja Também



SimpleXMLElement::attributes

(PHP 5, PHP 7)

SimpleXMLElement::attributesIdentifica um atributo de um elemento

Descrição

public SimpleXMLElement::attributes ([ string $ns = NULL [, bool $is_prefix = false ]] ) :

Esta função provê os atributos e valores definidos dentro de uma tag XML.

Nota: SimpleXML tem uma regra quando adicionando propriedades interativas para a maioria dos métodos. Eles não podem ser visualizados com ou outros métodos que examinem objetos.

Parâmetros

ns

Um namespace opcional para os atributos retornados

is_prefix

FALSE por padrão

Valor Retornado

Retorna um objeto que pode iterar os atributos da tag.

Retornará NULL se chamado em um objeto que já represente um atributo e não uma tag.

Exemplos

Exemplo #1 Interpretando uma string XML

<?php
$string 
= <<<XML
<a xmlns:b>
 <foo name="one" game="lonely">1</foo>
</a>
XML;

$xml = simplexml_load_string($string);
foreach(
$xml->foo[0]->attributes() as $a => $b) {
    echo 
$a,'="',$b,"\"\n";
}
?>

O exemplo acima irá imprimir:

name="one"
game="lonely"

Veja Também



SimpleXMLElement::children

(PHP 5, PHP 7)

SimpleXMLElement::childrenEncontra os nós filhos de um dado nó

Descrição

public SimpleXMLElement::children ([ string $ns [, bool $is_prefix = false ]] ) :

Este método encontra os nós filhos que estão dentro de um dado membro. O resultado segue as regras normais de iteração.

Nota: SimpleXML tem uma regra quando adicionando propriedades interativas para a maioria dos métodos. Eles não podem ser visualizados com ou outros métodos que examinem objetos.

Parâmetros

ns

Um namespace XML.

is_prefix

Se o parâmetro is_prefix for definido como TRUE, ns será considerado um prefixo. Se definido como FALSE, ns será considerado uma URL de um namespace.

Valor Retornado

Retorna um elemento , não importando se o nó possui filhos ou não.

Changelog

Versão Descrição
5.2.0 O parâmetro opcional is_prefix foi adicionado.

Exemplos

Exemplo #1 Percorrendo um pseudo-array children()

<?php
$xml 
= new SimpleXMLElement(
'<person>
 <child role="son">
  <child role="daughter"/>
 </child>
 <child role="daughter">
  <child role="son">
   <child role="son"/>
  </child>
 </child>
</person>'
);

foreach (
$xml->children() as $second_gen) {
    echo 
' The person begot a ' . $second_gen['role'];

    foreach (
$second_gen->children() as $third_gen) {
        echo 
' who begot a ' . $third_gen['role'] . ';';

        foreach (
$third_gen->children() as $fourth_gen) {
            echo 
' and that ' . $third_gen['role'] .
                
' begot a ' . $fourth_gen['role'];
        }
    }
}
?>

O exemplo acima irá imprimir:

The person begot a son who begot a daughter; The person
begot a daughter who begot a son; and that son begot a son

Exemplo #2 Utilizando namespaces

<?php
$xml 
'<example xmlns:foo="my.foo.urn">
  <foo:a>Apple</foo:a>
  <foo:b>Banana</foo:b>
  <c>Cherry</c>
</example>'
;

$sxe = new SimpleXMLElement($xml);

$kids = $sxe->children('foo');
var_dump(count($kids));

$kids = $sxe->children('foo', TRUE);
var_dump(count($kids));

$kids = $sxe->children('my.foo.urn');
var_dump(count($kids));

$kids = $sxe->children('my.foo.urn', TRUE);
var_dump(count($kids));

$kids = $sxe->children();
var_dump(count($kids));
?>
int(0)
int(2)
int(2)
int(0)
int(1)

Notas

O método SimpleXMLElement::children() retorna um objeto de um nó não importando se este possui ou não filhos. Utilize a função no valor de retorno para verificar por nós filhos. A partir do PHP 5.3.0, o método deve ser utilizado em substituição.

Veja Também



SimpleXMLElement::__construct

(PHP 5, PHP 7)

SimpleXMLElement::__constructCria um novo objeto SimpleXMLElement

Descrição

final public SimpleXMLElement::__construct ( string $data [, int $options = 0 [, bool $data_is_url = false [, string $ns = "" [, bool $is_prefix = false ]]]] )

Cria um novo objeto .

Parâmetros

data

Uma string XML bem formada ou, um caminho ou URL para um documento XML se data_is_url for TRUE.

options

Opcionalmente utilizado para especificar .

data_is_url

Por padrão, data_is_url é FALSE. Utilize TRUE para especificar que o parâmetro data é um caminho ou URL para um documento XML ao invés de string.

ns

Prefixo ou URI do namespace.

is_prefix

TRUE se ns é um prefixo, FALSE se é uma URI; o padrão será FALSE.

Valor Retornado

Retorna um objeto representando data.

Erros

Produz uma mensagem de erro E_WARNING para cada erro encontrado nos dados do XML e, adicionalmente, dispara uma se as informações no XML não puderem ser interpretadas.

Dica

Utilize a função para suprimir todos os erros XML, e a função para iterá-los, depois.

Exemplos

Nota:

Os exemplos listados podem incluir o arquivo example.php, que referem-se a uma string XML encontrada no primeiro exemplo do guia de .

Exemplo #1 Cria um objeto SimpleXMLElement

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
echo 
$sxe->movie[0]->title;

?>

O exemplo acima irá imprimir:

PHP: Behind the Parser

Exemplo #2 Cria um objeto SimpleXMLElement de uma URL

<?php

$sxe 
= new SimpleXMLElement('http://example.org/document.xml', NULL, TRUE);
echo 
$sxe->asXML();

?>

Changelog

Versão Descrição
5.2.0 Adicionado os parâmetros ns e is_prefix.
5.1.2 Adicionado os parâmetros options e data_is_url.

Veja Também



SimpleXMLElement::count

(PHP 5 >= 5.3.0, PHP 7)

SimpleXMLElement::countConta os filhos de um elemento

Descrição

public SimpleXMLElement::count ( ) : int

Este método conta o número de filhos de um elemento.

Valor Retornado

Retorna o número de elementos de um elemento.

Exemplos

Exemplo #1 Contando o número de filhos

<?php
$xml 
= <<<EOF
<people>
 <person name="Person 1">
  <child/>
  <child/>
  <child/>
 </person>
 <person name="Person 2">
  <child/>
  <child/>
  <child/>
  <child/>
  <child/>
 </person>
</people>
EOF;

$elem = new SimpleXMLElement($xml);

foreach (
$elem as $person) {
    
printf("%s has got %d children.\n", $person['name'], $person->count());
}
?>

O exemplo acima irá imprimir:

Person 1 has got 3 children.
Person 2 has got 5 children.

Veja Também



SimpleXMLElement::getDocNamespaces

(PHP 5 >= 5.1.2, PHP 7)

SimpleXMLElement::getDocNamespacesRetorna um namespace declarado no documento

Descrição

public SimpleXMLElement::getDocNamespaces ([ bool $recursive = false [, bool $from_root = true ]] ) : array

Retorna um namespace declarado no documento

Parâmetros

recursive

Se especificado, retorna todos os namespaces declarados no nó pai e nos nós filhos. De outra forma, retornará apenas os namespaces declarados no nó raiz.

from_root

Permite checar recursivamente os namespaces sob um nó filho em vez do nó raiz do documento XML.

Valor Retornado

O método getDocNamespaces retorna uma array com os namespaces associados às suas URIs.

Exemplos

Exemplo #1 Pega os namespaces do documento

<?php

$xml 
= <<<XML
<?xml version="1.0" standalone="yes"?>
<people xmlns:p="http://example.org/ns">
    <p:person id="1">John Doe</p:person>
    <p:person id="2">Susie Q. Public</p:person>
</people>
XML;

$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getDocNamespaces();
var_dump($namespaces);

?>

O exemplo acima irá imprimir:

array(1) {
   ["p"]=>
   string(21) "http://example.org/ns"
}

Exemplo #2 Trabalhando com múltiplos namespaces

<?php

$xml 
= <<<XML
<?xml version="1.0" standalone="yes"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
    <p:person t:id="1">John Doe</p:person>
    <p:person t:id="2" a:addr="123 Street" xmlns:a="http://example.org/addr">
        Susie Q. Public
    </p:person>
</people>
XML;

$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getDocNamespaces(TRUE);
var_dump($namespaces);

?>

O exemplo acima irá imprimir:

array(3) {
  ["p"]=>
  string(21) "http://example.org/ns"
  ["t"]=>
  string(23) "http://example.org/test"
  ["a"]=>
  string(23) "http://example.org/addr"
}

Changelog

Versão Descrição
5.4.0 Adicionado o parâmetro from_root.

Veja Também



SimpleXMLElement::getName

(PHP 5 >= 5.1.3, PHP 7)

SimpleXMLElement::getNamePega o nome de um elemento XML

Descrição

public SimpleXMLElement::getName ( ) : string

Pega o nome do elemento XML.

Valor Retornado

O método getName retorna uma string com o nome da tag XML referenciada pelo objeto SimpleXMLElement.

Exemplos

Nota:

Os exemplos listados podem incluir o arquivo example.php, que referem-se a uma string XML encontrada no primeiro exemplo do guia de .

Exemplo #1 Pega os nomes dos elementos XML

<?php
include 'example.php';
$sxe = new SimpleXMLElement($xmlstr);

echo 
$sxe->getName() . "\n";

foreach (
$sxe->children() as $child)
{
    echo 
$child->getName() . "\n";
}

?>

O exemplo acima irá imprimir:

movies
movie


SimpleXMLElement::getNamespaces

(PHP 5 >= 5.1.2, PHP 7)

SimpleXMLElement::getNamespacesRetorna os namespaces utilizados no documento

Descrição

public SimpleXMLElement::getNamespaces ([ bool $recursive = false ] ) : array

Retorna os namespaces utilizados no documento

Parâmetros

recursive

Se especificado, retorna todos os namespaces utilizados no nó pai e nos nós filhos. Caso contrário, retorna apenas os namespaces utilizados no nó raíz (root node).

Valor Retornado

O método getNamespaces retorna uma array de namespace com suas respectivas URIs.

Exemplos

Exemplo #1 Get document namespaces in use

<?php

$xml 
= <<<XML
<?xml version="1.0" standalone="yes"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
    <p:person id="1">John Doe</p:person>
    <p:person id="2">Susie Q. Public</p:person>
</people>
XML;

$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getNamespaces(true);
var_dump($namespaces);

?>

O exemplo acima irá imprimir:

array(1) {
  ["p"]=>
  string(21) "http://example.org/ns"
}

Veja Também



SimpleXMLElement::registerXPathNamespace

(PHP 5 >= 5.1.0, PHP 7)

SimpleXMLElement::registerXPathNamespaceCria um prefixo/namespace de contexto para a próxima consulta XPath

Descrição

public SimpleXMLElement::registerXPathNamespace ( string $prefix , string $ns ) : bool

Cria um prefixo/namespace de contexto para a próxima consulta XPath. Basicamente, esta função será útil se o provedor do documento XML informado, altera os prefixos dos namespaces. registerXPathNamespace criará um prefixo para o namespace associado, permitindo o acesso a nós no namespace sem a necessidade de mudar o código para permitir novos prefixos ditados pelo provedor.

Parâmetros

prefix

O prefixo do namespace utilizado na consulta XPath para o namespace dado em ns.

ns

O namespace para ser utilizado na consulta XPath. Este parâmetro deve fechar com um namespace utilizado pelo documento XML ou a consulta XPath utilizando prefix não retornará nenhum resultado.

Valor Retornado

Retorna TRUE em caso de sucesso ou FALSE em caso de falha.

Exemplos

Exemplo #1 Definindo um prefixo de namespace para ser usado em uma consulta XPath

<?php

$xml 
= <<<EOD
<book xmlns:chap="http://example.org/chapter-title">
    <title>My Book</title>
    <chapter id="1">
        <chap:title>Chapter 1</chap:title>
        <para>Donec velit. Nullam eget tellus vitae tortor gravida scelerisque.
            In orci lorem, cursus imperdiet, ultricies non, hendrerit et, orci.
            Nulla facilisi. Nullam velit nisl, laoreet id, condimentum ut,
            ultricies id, mauris.</para>
    </chapter>
    <chapter id="2">
        <chap:title>Chapter 2</chap:title>
        <para>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin
            gravida. Phasellus tincidunt massa vel urna. Proin adipiscing quam
            vitae odio. Sed dictum. Ut tincidunt lorem ac lorem. Duis eros
            tellus, pharetra id, faucibus eu, dapibus dictum, odio.</para>
    </chapter>
</book>
EOD;

$sxe = new SimpleXMLElement($xml);

$sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
$result = $sxe->xpath('//c:title');

foreach (
$result as $title) {
  echo 
$title . "\n";
}

?>

O exemplo acima irá imprimir:

Chapter 1
Chapter 2

Perceba como como o documento XML mostrado no exemplo define o namespace com o prefixo de chap. Imagine que este documento (ou outro semelhante) deveria ter utilizado o prefixo de c no passado para o mesmo namespace. Uma vez que ele foi alterado, a consulta XPath não irá mais retornar os resultados apropriados e a consulta exigirá modificações. Utilizando registerXPathNamespace evita modificações futuras na consulta, mesmo que o provedor altere o prefixo dos namespaces.

Veja Também



SimpleXMLElement::saveXML

(PHP 5 >= 5.2.0, PHP 7)

SimpleXMLElement::saveXMLSinônimo de

Descrição

Este método é um apelido para:



SimpleXMLElement::__toString

(PHP 5 >= 5.3.0, PHP 7)

SimpleXMLElement::__toStringRetorna o conteúdo como uma string

Descrição

public SimpleXMLElement::__toString ( ) : string

Retorna o texto que está contido diretamente no elemento. Não retorna o texto que está dentro de elementos filhos.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna o conteúdo como uma string em caso de sucesso ou uma string varia, se falhar.

Exemplos

Exemplo #1 Recuperando o conteúdo como uma string

<?php
$xml 
= new SimpleXMLElement('<a>1 <b>2 </b>3</a>');
echo 
$xml;
?>

O exemplo acima irá imprimir:

1 3

Veja Também



SimpleXMLElement::xpath

(PHP 5, PHP 7)

SimpleXMLElement::xpathExecuta uma consulta XPath em dados XML

Descrição

public SimpleXMLElement::xpath ( string $path ) : array

O método xpath vasculha o nó SimpleXML em busca de nós filhos correspondentes ao XPath path.

Parâmetros

path

Um caminho XPath

Valor Retornado

Retorna uma array de um objeto SimpleXMLElement ou FALSE em caso de erro.

Exemplos

Exemplo #1 Xpath

<?php
$string 
= <<<XML
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <d>
  <c>code</c>
 </d>
</a>
XML;

$xml = new SimpleXMLElement($string);

/* Search for <a><b><c> */
$result = $xml->xpath('/a/b/c');

while(list( , 
$node) = each($result)) {
    echo 
'/a/b/c: ',$node,"\n";
}

/* Relative paths also work... */
$result = $xml->xpath('b/c');

while(list( , 
$node) = each($result)) {
    echo 
'b/c: ',$node,"\n";
}
?>

O exemplo acima irá imprimir:

/a/b/c: text
/a/b/c: stuff
b/c: text
b/c: stuff

Note que os dois resultados são iguais.

Veja Também


Índice