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

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

Я понял, что вы можете использовать simplexml_load_string () и передать нужную корневую строку, а затем у вас есть объект, с которым вы можете манипулировать, добавляя детей … хотя это похоже на хак, поскольку я должен на самом деле hardcode некоторые 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 вы должны использовать класс Document Object Model . Пример:

 $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 означает D ocument O bject M odel; это стандартизованный API в XML-документы.