Я преобразовываю php-переменные в формат XML.
я заметил, что когда я просто использую DOMDocument вместе с;
$dom-> formatOutput = true;
для создания XML, он правильно форматирует (т.е. отступы строк и т.д.),
код, используя только DOMDocument
$dom = new DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;
$root = $dom->createElement('student');
$dom->appendChild($root);
$result = $dom->createElement('result');
$root->appendChild($result);
$result->setAttribute('id', 1);
$result->appendChild( $dom->createElement('name', 'Opal Kole') );
$result->appendChild( $dom->createElement('sgpa', '8.1') );
$result->appendChild( $dom->createElement('cgpa', '8.4') );
echo '<xmp>'. $dom->saveXML() .'</xmp>';
$dom->save('result.xml') or die('XML Create Error');
**Результат **
<?xml version="1.0" encoding="UTF-8"?>
<student>
<result id="1">
<name>Opal Kole</name>
<sgpa>8.1</sgpa>
<cgpa>8.4</cgpa>
</result>
</student>
Однако, если я пытаюсь использовать simplexml с domDocument, он больше не форматируется правильно;
ниже - образец проблемы
$dom = new domDocument;
$dom->formatOutput = true;
$root = $dom->appendChild($dom->createElement( "user" ));
$sxe = simplexml_import_dom( $dom );
$sxe->addChild("firstname", "John");
$sxe->addChild("surname", "Brady");
$sxe->asXML('testingXML.xml');
результат;
<?xml version="1.0"?>
<user><firstname>John</firstname><surname>Brady</surname></user>
вы заметите, что оно больше не форматируется нужным образом.
Я следил за всеми примерами онлайн-уроков, которые сочетают простой xml с dom, но ни один из них не отформатирован правильно.
ОБНОВИТЬ
Я попробовал много решений на форумах, но, похоже, не работал для меня.
однако, я только что нашел это solution-, он действительно work-, однако, его длинный ветер. он требует от меня сначала сохранить файл с помощью simpleXML и затем перезагрузить сохраненный файл и СЕЙЧАС сохранить его с помощью DocumentDom:
$sxe->asXML('simple_xml_create.xml');
$simplexml = simplexml_load_file("simple_xml_create.xml");
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simplexml->asXML());
$xml = new SimpleXMLElement($dom->saveXML());
$xml->saveXML("simple_xml_create.xml");
ЭТО БОЛЕЕ ЭЛЕГАНТНОЕ РЕШЕНИЕ?
Прежде всего вам удалось узнать, что DOMDocument поддерживает форматированный XML, а SimpleXMLElement - нет. И это абсолютно правильно.
Так как вы хотите использовать SimpleXMLElement для фактического создания XML-документа, но вы также хотите воспользоваться опциями форматирования из DOMDocument, вам может понадобиться узнать о том, что обе библиотеки являются сестринскими библиотеками, которые очень хорошо работают друг с другом. Вы уже вроде, кажется, знают о том, что, как вы используете simplexml_import_dom
для преобразования объекта DOMNode в него SimpleXmlElement опротестовать.
Вы, похоже, не знаете, как близко вы уже были. Пожалуйста, просмотрите следующий пример, который я скопировал из вашего вопроса. Я просто добавил одну строку в самом конце (и изменил имя файла на стандартный вывод, чтобы он перекликался с документами):
$dom = new domDocument;
$dom->formatOutput = true;
$root = $dom->appendChild($dom->createElement( "user" ));
$sxe = simplexml_import_dom( $dom );
$sxe->addChild("firstname", "John");
$sxe->addChild("surname", "Brady");
$sxe->asXML('php://output');
$dom->save('php://output');
Метод SimpleXMLElement::saveXML()
будет использовать DOMDocument::save()
вывод, в то время как метод DOMDocument::save()
будет использовать форматирование при настройке параметров для:
<?xml version="1.0"?>
<user><firstname>John</firstname><surname>Brady</surname></user>
<?xml version="1.0"?>
<user>
<firstname>John</firstname>
<surname>Brady</surname>
</user>
И это уже.
этот код работал для меня, и он также довольно чистый:
header('Content-type: text/xml');
echo $xml->asXML();
где $ xml - это SimpleXMLElement - этот код будет печатать XML следующим образом
<Attribute>
<ChildAttribute>Value</ChildAttribute>
</Attribute>
Это взято из официальной документации PHP SimpleXMLElement :: asXML
Надеюсь, что это поможет вам!