Pergunta

É possível utilizar as funções SimpleXML do PHP para criar um objeto XML a partir do zero? Olhando através da lista de funções, há maneiras de importar uma string XML existente em um objeto que você pode, então, manipular, mas se eu só quero gerar um objeto XML programaticamente a partir do zero, o que é a melhor maneira de fazer isso?

Eu descobri que você pode usar simplexml_load_string () e passar na cadeia de raiz que você quer, e então você tem um objeto que você pode manipular, adicionando as crianças ... embora esta parece ser uma espécie de truque, uma vez Eu tenho que realmente codificar alguns XML na seqüência antes que possa ser carregado.

Já fiz isso usando as funções DOMDocument , embora seja um pouco confuso porque eu não tenho certeza do que o DOM tem a ver com a criação de um documento XML puro ... então talvez seja apenas mal chamado: -)

Foi útil?

Solução

Claro que você pode. Por exemplo.

<?php
$newsXML = new SimpleXMLElement("<news></news>");
$newsXML->addAttribute('newsPagePrefix', 'value goes here');
$newsIntro = $newsXML->addChild('content');
$newsIntro->addAttribute('type', 'latest');
Header('Content-type: text/xml');
echo $newsXML->asXML();
?>

saída

<?xml version="1.0"?>
<news newsPagePrefix="value goes here">
    <content type="latest"/>
</news>

Divirta-se.

Outras dicas

No PHP5, você deve usar o Documento Objeto modelo classe em vez. Exemplo:

$domDoc = new DOMDocument;
$rootElt = $domDoc->createElement('root');
$rootNode = $domDoc->appendChild($rootElt);

$subElt = $domDoc->createElement('foo');
$attr = $domDoc->createAttribute('ah');
$attrVal = $domDoc->createTextNode('OK');
$attr->appendChild($attrVal);
$subElt->appendChild($attr);
$subNode = $rootNode->appendChild($subElt);

$textNode = $domDoc->createTextNode('Wow, it works!');
$subNode->appendChild($textNode);

echo htmlentities($domDoc->saveXML());

Por favor, veja a minha resposta aqui . Como aponta dreamwerx.myopenid.com , é possível fazer isso com SimpleXML , mas o DOM extensão seria a maneira melhor e mais flexível. Além disso, há uma terceira via: usando XMLWriter . É muito mais simples de usar do que o DOM e, portanto, é a minha maneira preferida de escrever documentos XML a partir do zero.

$w=new XMLWriter();
$w->openMemory();
$w->startDocument('1.0','UTF-8');
$w->startElement("root");
    $w->writeAttribute("ah", "OK");
    $w->text('Wow, it works!');
$w->endElement();
echo htmlentities($w->outputMemory(true));

A propósito: DOM significa D ocument O bject M odelo; esta é a API padronizada em documentos XML.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top