【问题标题】:PHP: DOMNode::appendChild to an array of ElementsPHP:DOMNode::appendChild 到元素数组
【发布时间】:2012-02-02 13:49:41
【问题描述】:

我正在使用 DOMDocument 来解析 XML 文件。我遍历不同的元素,看看是否缺少任何元素,然后用 createElement 填充一个数组,并显示错误消息。最后我试图 appendChild 该数组,但我总是收到相同的错误消息:

Uncaught exception 'DOMException' with message 'Wrong Document Error'
DOMNode->appendChild(Object(DOMElement))
1 {main}
thrown in /xxx/xxx.php on line 235
PHP Fatal error: Call to undefined method DOMElement::item() in /xxx/xxx.php on line 235.

代码如下:

$SMQuery = new DOMDocument();
$SMQuery->loadXML($params);
$response = $SMQuery->createElement('SMreply');
$errors = array();
if (!$reqtyp = $SMQuery->getElementsByTagName("tag1"))
{$errors[] = $SMQuery->createElement('error', 'tag1 Element is missing');}
if (!$reqtyp = $SMQuery->getElementsByTagName("tag2"))
{$errors[] = $SMQuery->createElement('error', 'tag2 Element is missing');}
......

if(!empty($errors))
{
 foreach($errors as $error) {
  $response->appendChild($error); <==== this line is causing the error !!!
 }
}

非常感谢任何帮助。 干杯, 力奇。

【问题讨论】:

  • 明白了!!!!我的原始代码中有错字!
  • 那么错字和更正是什么?

标签: php xml domdocument appendchild domexception


【解决方案1】:

您没有显示定义 $response 的位置,但如果它是另一个 new DOMDocument() 的结果,那么这就解释了您的错误 - 您不能将节点从一个 DOM 对象直接添加到另一个对象。它必须首先通过-&gt;importNode() 导入。只有在那之后你才能真正附加它。

【讨论】:

  • 抱歉那行丢失了。 $response 已定义(我只是在那里编辑了代码并添加了它)!。 ->importNode 导致相同的错误消息。我认为我不需要做一个 importNode,因为如果我做 $test = $SMQuery->createElement('test','test'); $response->appendChild($test);效果很好,不需要使用 importNode!
猜你喜欢
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多