我正在尝试使用XML
中的SimpleXML
对现有PHP
文档进行简单的追加。我有一个HTML
表单,该表单调用一个PHP
脚本,该脚本试图将数据附加到同一目录中已经存在的XML
文档中。
我已经尝试了此方法的基本实现,但始终出现以下错误:
Warning: SimpleXMLElement::addChild(): Cannot add child. Parent is
not a permanent member of the XML tree in
/the/directory/to/the/site/generate.php on line
9
Fatal error: Uncaught Error: Call to a member function addChild() on
null...
以下是正在使用的XML
文件:
<?xml version="1.0" encoding="UTF-8"?>
<tasks>
<users/>
<taskList>
<tasks id="1234">
<activities>
<activity/>
</activities>
</task>
</taskList>
</tasks>
这是PHP
代码:
<?php
$file = 'tasks.xml';
$xml = simplexml_load_file($file);
$activities = $xml->activities;
$activity = $activities->addChild('activity');
$activity->setAttribute('id', '45678');
$activity->addChild('assigned', 'Jon');
$activity->addChild('priority', 'low');
$xml->asXML($file);
我很难对值进行编码,只是为了使附录起作用,但是最终这些值将来自提交的html
表单。
关于为什么失败的任何想法?
答案 0 :(得分:1)
您的代码有两个问题。首先,您的XML无效,您的关闭标签应为</tasks>
。
当您尝试获得<activities>
标签时
$activities = $xml->activities;
这正试图在文档根部附近找到标记,您可以使用完整路径
$activities = $xml->taskList->tasks->activities;
或使用(我在这段代码中有)XPath来查找它,这也使您可以根据需要选择({必要时)根据ID使用哪个<tasks>
标签。
$activities = $xml->xpath("//activities")[0];
$activity = $activities->addChild('activity');
$activity->addAttribute('id', '45678');
$activity->addChild('assigned', 'Jon');
$activity->addChild('priority', 'low');
您还使用了setAttribute()
,它不存在-代码显示为addAttribute()
。