Использование SimpleXML для создания объекта XML с нуля - PullRequest
73 голосов
/ 27 сентября 2008

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

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

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

Ответы [ 3 ]

134 голосов
/ 27 сентября 2008

Конечно, вы можете. Например.

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

Веселись.

21 голосов
/ 27 сентября 2008

В 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());
16 голосов
/ 27 сентября 2008

Пожалуйста, смотрите мой ответ здесь . Как указывает 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.

...