формат XML-строки

Каков наилучший способ форматирования XML в классе PHP.

$xml = "<element attribute=\"something\">...</element>"; $xml = '<element attribute="something">...</element>'; $xml = '<element attribute=\'something\'>...</element>'; $xml = <<<EOF <element attribute="something"> </element> EOF; 

Я уверен, что это последний!

Related of "формат XML-строки"

С DOM вы можете сделать

 $dom = new DOMDocument; $dom->preserveWhiteSpace = FALSE; $dom->loadXML('<root><foo><bar>baz</bar></foo></root>'); $dom->formatOutput = TRUE; echo $dom->saveXML(); 

дает ( живую демонстрацию )

 <?xml version="1.0"?> <root> <foo> <bar>baz</bar> </foo> </root> 

См. DOMDocument::formatOutput и DOMDocument::preserveWhiteSpace .

Эта функция работает идеально, так как вы хотите, чтобы вам не нужно было использовать какую-либо библиотеку xml dom или ness, просто передайте в нее строку, сгенерированную xml, и она будет анализировать и генерировать новую с помощью вкладок и разрывов строк.

 function formatXmlString($xml){ $xml = preg_replace('/(>)(<)(\/*)/', "$1\n$2$3", $xml); $token = strtok($xml, "\n"); $result = ''; $pad = 0; $matches = array(); while ($token !== false) : if (preg_match('/.+<\/\w[^>]*>$/', $token, $matches)) : $indent=0; elseif (preg_match('/^<\/\w/', $token, $matches)) : $pad--; $indent = 0; elseif (preg_match('/^<\w[^>]*[^\/]>.*$/', $token, $matches)) : $indent=1; else : $indent = 0; endif; $line = str_pad($token, strlen($token)+$pad, ' ', STR_PAD_LEFT); $result .= $line . "\n"; $token = strtok("\n"); $pad += $indent; endwhile; return $result; } 

// Вот пример использования XMLWriter

 $w = new XMLWriter; $w->openMemory(); $w->setIndent(true); $w->startElement('foo'); $w->startElement('bar'); $w->writeElement("key", "value"); $w->endElement(); $w->endElement(); echo $w->outputMemory(); 

//вывод

 <foo> <bar> <key>value</key> </bar> </foo> 

Первое лучше, если вы планируете внедрять ценности в XML, второе лучше для людей читать. Ничего хорошего, если вы действительно работаете с XML.

Однако, если вы намереваетесь выполнить простую функцию пожара и забыть, которая принимает XML в качестве входного параметра, я бы сказал, что используйте первый метод, потому что вам нужно будет внедрить параметры в какой-то момент.

Я лично использовал бы PHP-класс simplexml, он очень прост в использовании, и он встроен в поддержку xpath, что позволяет детализировать данные, возвращенные в XML, мечтой.