Использование SimpleXML для создания XML-объекта с нуля
можно ли использовать функции PHP SimpleXML для создания XML-объекта с нуля? Просматривая список функций, есть способы импортировать существующую строку XML в объект, которым вы можете управлять, но если я просто хочу создать объект XML программно с нуля, каков наилучший способ сделать это?
Я понял, что вы можете использовать simplexml_load_string() и передать корневую строку, которую вы хотите, а затем у вас есть объект, которым вы можете манипулировать добавляя детей... хотя это похоже на взлом, так как мне нужно на самом деле жестко закодировать некоторые XML в строку, прежде чем ее можно будет загрузить.
Я сделал это с помощью функции DOMDocument, хотя это немного запутанно, потому что я не уверен, что DOM имеет отношение к созданию чистого XML-документа... так что, может быть, это просто плохо названо : -)
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-документы.