1) Извините, но это, как бы сказать по-мягче, глупость — сначала создавать DOM объект, а потом конвертировать его в simplexml/строку, который потом будет снова конвертирован в DOM.
2) Хм, ну не знаю — вообще то в DOMDocument::createElement ( string $name [, string $value ] ), под $value понимается текстовое значение, для добавления детей нужно использовать DOMNode->appendChild()
3) Наличие html_entity_decode от непонимания — см. предыдущий пункт.
4) Я бы с удовольствием оторвал вам руки за то, что функция std2simplexml при передаче одних агрументов возвращает SimpleXMLElement, а при других строку.
5) Охренеть, а зачем?!
$new_xml = str_replace(array('','',''),'',$new_xml);
Да, но насколько я понимаю XSLTProcessor::transformToXML принимает только DOMDocument, поправьте, если ошибаюсь. Или вы вы имеете в виду, что вместо него нужно было использовать DOMDocument?
Если бы я не позорился, уважаемый DeusModus не смог бы указать мне на XMLSerializer.
Насчет 5-го пункта, там видимо раньше было что-то более осмысленное, упустил из виду.
Насчет 4-го пункта, что вы увидели в этом такого криминального (нет, я серьезно, объясните)? По задумке строка должна была возвращаться только в случае рекурсии, а второй аргумент передавать только внутри функции.
> Если бы я не позорился, уважаемый DeusModus не смог бы указать мне на XMLSerializer.
Опыта у вас мало? Я прав?
> Насчет 4-го пункта, что вы увидели в этом такого криминального (нет, я серьезно, объясните)?
В этом то и проблема, при поддержке это боком выйдет, т.к. название и поведение этой функции подразумевает получение SimpleXMLElement. Пройдет время и кому то понадобится получить SimpleXMLElement, но без вложенных элементов — вот радости то ему привалит…
— Наиболее логично функция выглядела бы так (псевдо код):
/**
* @param mixed $object конвертируемый объект
* @param bool $recursive нужно ли обрабатывать вложенные элементы?
* @param DOMNode $parent родительский узел
*
* @return DOMNode
*/
function convertToDom($object, $recursive, $parent = null);
// 1
$node = convertToDom($object, true, new DOMDocument()); // DOMDocument
$html = (new XSLTProcessor())->transformToXML($node);
Смотря что называть опытом, и смотря с чьим опытом сравнивать.
Говнокодом занимаюсь уже больше двух лет, о php впервые услышал где-то 2,5 года назад. Но судя по всему да, опыта у меня мало.
Это должны быть разные функции, не должен у функции тип результата зависеть от параметра, это слишком неочевидно. Более того, булевские флаги в функции говорят о том, что она делает больше одного дела, следовательно ее надо разбивать на несколько простых.
Функция конвертации stdClass в SimpleXml