Если вы выводите полный XML с echo $xml->asXML()
, вы увидите, что, как вы просили, дополнительные дочерние узлы были добавлены к первому узлу комментария:
<comment>
<user>User4251</user>
<date>02.10.2018</date>
<text>Comment body goes here</text>
<user>User2245</user><date>02.10.2018</date><text>The comment text goes here</text>
</comment>
Причина, по которой был изменен только первый comment
, та же причина, по которой ваш echo
не показывает новые значения: если вы ссылаетесь на такой элемент, как $xml->comment
или $comment->user
, вы сначала получаете дочерний элемент с таким именем;это просто сокращение для $xml->comment[0]
или $comment->user[0]
.Это действительно очень удобно для навигации по документам XML, потому что вам не нужно знать, есть ли один или несколько элементов с определенным именем, вы можете написать $xml->comment->user
или $xml->comment[0]->user[0]
или $xml->comment->user[0]
и т. Д.
Поскольку вы позвонили addChild
, новые user
, date
и text
не первые дети с таким именем, поэтому они не отображаются в вашем выводе.
Если вы хотели создать новый комментарий , вам нужно сначала добавить это:
$comment = $xml->addChild('comment');
$comment->addChild('user', 'User2245');
Если вы хотели изменить значения дочерних элементов, вы можете просто написать им вместо добавления нового дочернего элемента:
$comment = $xml->comment[0]; // or just $comment = $xml->comment;
$comment->user = 'User2245';
Или вы можете добавить что-то к каждому из существующих комментариев (обратите внимание, что здесь мыиспользуйте $xml->comment
, как если бы это был массив; опять же, SimpleXML позволит нам сделать это, есть ли один или несколько подходящих элементов):
foreach ( $xml->comment as $comment ) {
$comment->addChild('modified', 'true');
}