Вызов addChild с пустой строкой в качестве значения (или даже с пробелом), по-видимому, приводит к добавлению избыточного узла SimpleXml внутри узла вместо добавления только узла без значения.
Вот краткая демонстрация того, что происходит:
[description] => !4jh5jh1uio4jh5ij14j34io5j!
А вот с пустой строкой:
[description] => SimpleXMLElement Object ( [0] => )
Обходной путь, который я использую на данный момент, довольно ужасен — я делаю str_replace в окончательном JSON, чтобы заменить !4jh5jh1uio4jh5ij14j34io5j! с пустой строкой. Фу. Возможно, единственный ответ на данный момент — «отправить отчет об ошибке в simplexml»…
У кого-нибудь есть лучшее решение?