Использование SimpleXML для создания XML-объекта с нуля


можно ли использовать функции PHP SimpleXML для создания XML-объекта с нуля? Просматривая список функций, есть способы импортировать существующую строку XML в объект, которым вы можете управлять, но если я просто хочу создать объект XML программно с нуля, каков наилучший способ сделать это?

Я понял, что вы можете использовать simplexml_load_string() и передать корневую строку, которую вы хотите, а затем у вас есть объект, которым вы можете манипулировать добавляя детей... хотя это похоже на взлом, так как мне нужно на самом деле жестко закодировать некоторые XML в строку, прежде чем ее можно будет загрузить.

Я сделал это с помощью функции DOMDocument, хотя это немного запутанно, потому что я не уверен, что DOM имеет отношение к созданию чистого XML-документа... так что, может быть, это просто плохо названо : -)

3 70

3 ответа:

конечно, можно. Например.

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

кстати: DOM расшифровывается как Document Object Model; это стандартизированный API в XML-документы.