php - 使用 SimpleXML 从 html 附加到 xml 的问题
问题描述
我正在尝试使用in对现有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
表单。
关于为什么失败的任何想法?
解决方案
您的代码有几个问题。首先,您的 XML 无效,您的结束标记应该是</tasks>
.
当您尝试获取<activities>
标签时
$activities = $xml->activities;
这是试图在文档根目录下找到标签,您可以使用完整路径
$activities = $xml->taskList->tasks->activities;
或使用(我在此代码中有)XPath 来查找它,这也允许您<tasks>
根据 id 选择(如果需要)您使用的标签。
$activities = $xml->xpath("//activities")[0];
$activity = $activities->addChild('activity');
$activity->addAttribute('id', '45678');
$activity->addChild('assigned', 'Jon');
$activity->addChild('priority', 'low');
您还使用setAttribute()
which doesn't exist - 如代码所示addAttribute()
。
推荐阅读
- python - 为什么我的线拟合在对数对数刻度中拟合时会导致 np.nan 的梯度?
- javascript - 打开没有内容的打印窗口
- javascript - 为什么 Edge 在这种情况下无法获得正确的 keydown 值?
- python - pygame中的高分系统
- jquery - Ajax 请求未通过 POST 发送数据
- postgresql - 事务中的游标在 go 和 psql 之间的行为不同
- apache-spark - 通过 livy 批处理 API 从 driverLogUrl 读取 spark stdout
- ruby-on-rails - 当我重置为以前的提交时,git 不清除 development.sqlite3
- r - R/Tcltk 条件文件菜单命令赋值
- html - 如何使用 Visual Studio 将结束标记与 HTML 中的开始标记对齐?