- 从我的previous question* 跟进。
我正在使用addChild()
添加另一个<comment>
元素作为根元素的子元素。我使用了来自this问题的代码:
$file = "comments.xml";
$comment = $xml -> comment;
$comment -> addChild("user","User2245");
$comment -> addChild("date","02.10.2018");
$comment -> addChild("text","The comment text goes here");
$xml -> asXML($file)
字符串
现在,当我回显文件内容时:
foreach($xml -> children() as $comments) {
echo $comments -> user . ", ";
echo $comments -> date . ", ";
echo $comments -> text . "<br>";
}
型
我只得到旧的文件内容(没有更改):
User4251,02.10.2018,Comment body goes here
User8650,02.10.2018,Comment body goes here
型
我正在使用相同的comments.xml文件。没有显示任何错误。
为什么不追加子元素?
2条答案
按热度按时间c9qzyr3d1#
您正在添加
comment
元素之一,请将其添加到完整文档中。字符串
https://3v4l.org/Pln6U
vybvopom2#
如果使用
echo $xml->asXML()
输出完整的XML,您将看到,按照您的要求,* 额外的子节点已添加 * 到第一个注解节点:字符串
只修改了第一个
comment
的原因与echo
不显示新值的原因相同:如果引用像$xml->comment
或$comment->user
这样的元素,则会得到具有该名称的 first 子元素;它只是$xml->comment[0]
或$comment->user[0]
的简写。这实际上对于浏览XML文档非常方便,因为你不必知道是否有一个或几个元素具有特定的名称,你可以写$xml->comment->user
或$xml->comment[0]->user[0]
或$xml->comment->user[0]
等等。由于您调用了
addChild
,新的user
、date
和text
不是第一个具有该名称的子节点,因此它们不会显示在您的输出中。如果你想创建一个新的评论,你需要先添加:
型
如果你想要的是 * 改变子元素的值 *,你可以直接写入它们,而不是添加一个新的子元素:
型
或者你可以给每个现有的注解添加一些东西(注意,这里我们使用
$xml->comment
,就像它是一个数组一样;同样,SimpleXML将允许我们这样做,无论有一个还是多个匹配元素):型