Pregunta

¿Es posible usar las funciones SimpleXML de PHP para crear un objeto XML desde cero? Mirando a través de la lista de funciones, hay formas de importar una cadena XML existente en un objeto que luego puede manipular, pero si solo quiero generar un objeto XML programáticamente desde cero, ¿cuál es la mejor manera de hacerlo?

Me di cuenta de que puedes usar simplexml_load_string () y pasar la cadena raíz que quieres, y luego tienes un objeto que puedes manipular agregando niños ... aunque esto parece una especie de hack, ya que Tengo que realmente codificar algunos XML en la cadena antes de poder cargarlos.

Lo he hecho usando las funciones DOMDocument , aunque es un poco confuso porque no estoy seguro de qué tiene que ver el DOM con la creación de un documento XML puro ... así que quizás esté mal llamado :-)

¿Fue útil?

Solución

Claro que puedes. Por ejemplo.

<?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();
?>

Salida

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

Diviértete.

Otros consejos

En PHP5, debe usar el Document Object Modelo en su lugar. Ejemplo:

$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 vea mi respuesta aquí . Como dreamwerx.myopenid.com señala, es posible hacerlo con SimpleXML , pero el extensión DOM sería la forma mejor y más flexible. Además, hay una tercera forma: usar XMLWriter . Es mucho más sencillo de usar que el DOM y, por lo tanto, es mi forma preferida de escribir documentos XML desde cero.

$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));

Por cierto: DOM significa D ocument O bject M odel; esta es la API estandarizada en documentos XML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top