2011-09-06 3 views
1

이 php 함수에서 루프에 ajax 통해 해당 함수를 호출하여 노드에 추가합니다. appenchild 호출이 성공한 첫 번째 시간입니다. 두 번째로 "정의되지 않은 메소드 호출"이라는 PHP 오류가 발생했습니다. 나는 이것이 왜 일어나는 지 이해하지 못한다. 여기 XML 노드 추가 자식 루프에서 호출

여기 PHP 함수

<?php 

ini_set('display_errors', 1); 
error_reporting(E_ALL); 

function mysql_escape_mimic($inp) { 
    if(is_array($inp)) 
     return array_map(__METHOD__, $inp); 

    if(!empty($inp) && is_string($inp)) { 
     return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp); 
    } 

    return $inp; 
} 


function add_url($nodeid, $urlid, $urlname, $urllink) { 

$dom = new DOMDocument(); 
$dom->load('communities.xml'); 

$dom->formatOutput = true; 
$dom->preserveWhiteSpace = true; 

// get document element 

$xpath = new DOMXPath($dom); 
$nodes = $xpath->query("//COMMUNITY[@ID='$nodeid']"); 

if ($nodes->length) { 

    $node = $nodes->item(0); 

    $xurls = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS"); 

    if ($xurls->length) { 

    } 
    else { 
     $xurls = $dom->createElement("URLS"); 
     $node->appendChild($xurls); 
    } 

    $xurl = $dom->createElement("URL"); 
    $xurl->setAttribute("ID", $urlid); 
    $xurls->appendChild($xurl); /* Function fails here second time, when node exists already */ 

    $xuname  = $dom->createElement("NAME"); 
    $xunameText = $dom->createTextNode(mysql_escape_mimic($urlname)); 
    $xuname->appendChild($xunameText); 
    $xurl->appendChild($xuname); 

    $xulink  = $dom->createElement("URLC"); 
    $xulinkText = $dom->createTextNode(mysql_escape_mimic($urllink)); 
    $xulink->appendChild($xulinkText); 
    $xurl->appendChild($xulink); 

} 
    echo "from add_url urlid: ".$urlid." urlname ".$urlname." urllink ".$urllink; 
$dom->save('communities.xml'); 
} 

echo add_url(trim($_REQUEST['nodeid']), trim($_REQUEST['urlid']), trim($_REQUEST['urlname']), trim($_REQUEST['urllink'])); 

?> 

되는 XML 구조이다.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<COMMUNITIES> 
    <COMMUNITY ID="c000002"> 
    <NAME>ID000002</NAME> 
    <TOP>192</TOP> 
    <LEFT>297</LEFT> 
    <WIDTH>150</WIDTH> 
    <HEIGHT>150</HEIGHT> 
    <URLS> 
    <URL ID="u000002"> 
     <NAME>Facebook.com</NAME> 
     <URLC>http://www.facebook.com</URLC> 
    </URL> 
    </URLS> 
    </COMMUNITY> 
</COMMUNITIES> 

답변

0

과 같이 편집하십시오 :

... 
if ($xurls->length) { 
    $xurls = $xurls->item(0); // from DOMNodeList to DOMNode 

나중에 $xurls에 자식을 추가하고 있기 때문에 요소를해야하므로이있다 (예 : createElement()에 의해 반환되는) 대신의 목록, PHP는 말합니다 :

Fatal error: Call to undefined method DOMNodeList::appendChild()

+0

감사합니다. 이 지금 작동합니다. – user823527