2012-02-02 3 views
0

Я использую DOMDocument для анализа XML-файла. Я прокручиваю различные элементы и вижу, отсутствует ли какая-либо из них, и я заполняю массив элементом createElement с сообщением об ошибке. В конце концов я пытаюсь AppendChild этот массив, но я всегда получаю то же сообщение об ошибке:PHP: DOMNode :: 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 !!! 
} 
} 

Любая помощь очень ценится. Cheers, Riki.

+0

GOT IT !!!! У меня была опечатка в моем исходном коде! –

+0

Так что это была опечатка и исправление? –

ответ

2

Вы не указали, где $response определяется, но если это результат другого new DOMDocument(), то это объясняет вам ошибку - вы не можете напрямую добавлять узлы от одного объекта DOM к другому. Он должен быть сначала импортирован через ->importNode(). Только после этого вы можете добавить его.

+1

Жаль, что строки не было. $ response (я только что отредактировал там код и добавил его) !. -> importNode вызывает одно и то же сообщение об ошибке. Я не думаю, что мне нужно сделать importNode, потому что если я делаю $ test = $ SMQuery-> createElement ('test', 'test'); $ response-> appendChild ($ test); , который отлично работает, и не нужно использовать importNode! –