【问题标题】:Issue appending to xml from html using SimpleXML使用 SimpleXML 从 html 附加到 xml 的问题
【发布时间】:2019-06-11 17:23:51
【问题描述】:

我正在尝试使用PHP 中的SimpleXML 对现有的XML 文档进行简单的追加。我有一个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 表单。

关于为什么失败的任何想法?

【问题讨论】:

    标签: php html xml


    【解决方案1】:

    您的代码存在一些问题。首先你的 XML 是无效的,你的结束标签应该是&lt;/tasks&gt;。

    当您尝试获取 &lt;activities&gt; 标记时

    $activities = $xml->activities;
    

    这是试图在文档的根目录下找到标签,您可以使用完整路径

    $activities = $xml->taskList->tasks->activities;
    

    或使用(我在此代码中)XPath 来查找它,这也允许您根据 id 选择(如果需要)您使用的 &lt;tasks&gt; 标签。

    $activities = $xml->xpath("//activities")[0];
    
    $activity = $activities->addChild('activity');
    $activity->addAttribute('id', '45678');
    $activity->addChild('assigned', 'Jon');
    $activity->addChild('priority', 'low');
    

    您还使用了不存在的setAttribute() - 如代码所示,它是addAttribute()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多