Вы хотите, чтобы дочерний элемент был добавлен в <create>
.
$nsNode = $xmlObj->command->create->addChild('domain:ns');
Метод children()
возвращает отфильтрованный список дочерних узлов.Этот список - как указывает сообщение об ошибке - не является постоянным членом дерева документов, к нему нельзя добавить.
Добавление дочернего элемента работает только с соответствующим родительским элементом илиоперация будет называться не «addChild», а «addSibling» - и это не то, как работает концепция DOM.
PS: Ваше второе сообщение об ошибке («Вызов функции-члена наобъект ") является результатом регулярного разгильдяйства.Вы не можете просто использовать объект, не проверив, что он действительно там , в вашем коде отсутствует эта проверка:
if ($nsNode !== null) {
$hostAttr = $nsNode->addChild('domain:hostAttr');
$hostName = $hostAttr->addChild('domain:hostName');
$hostAddr = $hostAttr->addChild('domain:hostAddr');
$hostAddr->addAttribute('ip', 'v4');
} else {
echo "Oops, addChild() failed!";
}