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


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

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

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

Author: dirtside, 2008-09-27

3 answers

Конечно, можешь. Например.

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

Веселитесь.

 130
Author: DreamWerx, 2014-01-09 07:54:23

В 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());
 20
Author: PhiLho, 2014-10-04 04:27:43

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

 15
Author: Stefan Gehrig, 2017-05-23 12:18:15