Domanda

È possibile utilizzare le funzioni SimpleXML di PHP per creare un oggetto XML da zero? Guardando l'elenco delle funzioni, ci sono modi per importare una stringa XML esistente in un oggetto che puoi quindi manipolare, ma se voglio solo generare un oggetto XML programmaticamente da zero, qual è il modo migliore per farlo?

Ho capito che puoi usare simplexml_load_string () e passare la stringa di root che vuoi, e poi hai un oggetto che puoi manipolare aggiungendo dei bambini ... anche se questo sembra una specie di hack, dal momento che Devo effettivamente codificare un po 'di codice XML nella stringa prima che possa essere caricato.

L'ho fatto usando le funzioni DOMDocument , sebbene sia un po 'confuso perché non sono sicuro di cosa abbia a che fare il DOM con la creazione di un documento XML puro ... quindi forse è solo un nome errato :-)

È stato utile?

Soluzione

Sicuro che puoi. Eg.

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

Output

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

Buon divertimento.

Altri suggerimenti

In PHP5, dovresti usare Oggetto documento Modello invece. Esempio:

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

Vedi la mia risposta qui . Come dreamwerx.myopenid.com sottolinea, è possibile farlo con SimpleXML , ma estensione DOM sarebbe il modo migliore e più flessibile. Inoltre c'è un terzo modo: usare XMLWriter . È molto più semplice da usare rispetto al DOM e quindi è il mio modo preferito di scrivere documenti XML da 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 proposito: DOM sta per D ocument O bject M odel; questa è l'API standardizzata in documenti XML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top