跟随我的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 文件。没有显示错误。
为什么子元素没有附加?
答案 0 :(得分:1)
您要添加到comment
元素之一,并将其添加到完整文档中。
$xml = new simplexmlelement('<?xml version="1.0" encoding="utf-8"?>
<comments><comment>
<user>User4251</user>
<date>02.10.2018</date>
<text>Comment body goes here</text>
</comment>
<comment>
<user>User8650</user>
<date>01.10.2018</date>
<text>Comment body goes here</text>
</comment></comments>');
$child = $xml->addchild('comment');
$child->addChild("user","User2245");
$child->addChild("date","02.10.2018");
$child->addChild("text","The comment text goes here");
echo $xml->asXML();
答案 1 :(得分:1)
如果使用echo $xml->asXML()
输出完整的XML,您将看到,根据要求,在第一个注释节点上添加了其他子节点:
<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
或{{1 }},您将获得具有该名称的 first 子元素;这只是$comment->user
或$xml->comment[0]
的简写。实际上,这对于浏览XML文档非常方便,因为您不必知道是否存在一个或多个具有特定名称的元素,可以编写$comment->user[0]
或$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';
就像是一个数组;同样,无论是否存在一个,SimpleXML都会让我们执行此操作或几个匹配的元素):
$xml->comment