Использование SimpleXML для создания XML-объекта с нуля
Вопрос
Можно ли использовать функции PHP SimpleXML для создания XML-объекта с нуля?Просматривая список функций, можно найти способы импортировать существующую XML-строку в объект, с которым затем можно манипулировать, но если я просто хочу программно сгенерировать XML-объект с нуля, каков наилучший способ сделать это?
Я выяснил, что вы можете использовать simplexml_load_string() и передать нужную вам корневую строку, и тогда у вас получится объект, которым вы можете манипулировать, добавляя дочерние элементы...хотя это кажется своего рода взломом, поскольку на самом деле мне нужно жестко закодировать некоторый XML в строку, прежде чем ее можно будет загрузить.
Я сделал это с помощью Функции DOMDocument, хотя это немного сбивает с толку, потому что я не уверен, какое отношение DOM имеет к созданию чистого XML-документа...так что, может быть, это просто неудачно названо :-)
Решение
Конечно, ты можешь.Например.
<?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();
?>
Выходной сигнал
<?xml version="1.0"?>
<news newsPagePrefix="value goes here">
<content type="latest"/>
</news>
Получайте удовольствие.
Другие советы
В PHP5 вы должны использовать Объектная модель документа вместо этого класс.Пример:
$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());
Пожалуйста, ознакомьтесь с моим ответом здесь.Как dreamwerx.myopenid.com указывает на то, что это можно сделать с помощью SimpleXML, но тот Расширение DOM это был бы лучший и более гибкий способ.Кроме того, есть третий способ:используя XmlWriter сейчас.Он намного проще в использовании, чем DOM, и поэтому это мой предпочтительный способ написания XML-документов с нуля.
$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));
Кстати: ДОМ расшифровывается как Dдокумент Oобъект Mодель;это стандартизированный API для преобразования в XML-документы.