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

StackOverflow https://stackoverflow.com/questions/143122

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Кстати: ДОМ расшифровывается как Dдокумент Oобъект Mодель;это стандартизированный API для преобразования в XML-документы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top