2011-05-11 6 views
0

내 문서의 head에 많은 데이터가 있지만 더 많은 데이터를 추가하려고합니다. 그렇다면 PHP::DOMDocument을 사용하여 <head> 태그의 내용을 대체하려면 어떻게해야합니까?PHP :: DOMDocument를 사용하여 요소의 내용을 대체하려면 어떻게해야합니까?

나는 다음과 같은 코드가 있습니다

$dom = new DOMDocument('1.0', 'UTF-8'); 
@$dom->loadHTML($page); 

$head = $dom->getElementsByTagName('head'); 

$keywords = new DOMElement('meta'); 
keywords->setAttribute('name', 'keywords'); 
$keywords->setAttribute('content', $page_def['keywords']); 
$head->appendChild($keywords); 

$description = new DOMElement('meta'); 
$description->setAttribute('name', 'description'); 
$description->setAttribute('content', $page_def['description']); 
$head->appendChild($description); 

$page = $dom->saveHTML(); 

page::dump($page);return; 

을하지만 오류가 발생합니다 : 정의되지 않은 메서드 DOMText ::의 setAttribute()를 호출

편집 : 나는 매우 것을보고 감아 PHP를 사용하기가 어렵습니다 : DOMDocument. 이 경우, 다음 코드를 사용 :

// Add the small meta data set to the header 
$page = utility::replaceStringBetween('<head>', '</head>', $header . $headers, $page); 
if (utility::getReplacementCount() == 0) 
{ 
    $error = "During page write: The head tags could not be modified within your page"; 
    if (settings::getConfig('context') == 'production') 
    { 
     if (settings::getConfig('log_enabled') == 'true') 
     { 
      dblog::insert(user::getId(), $error, 'error'); 
     } 
    } 
    // So the live pages will display correctly, unset the merge mode since the process which unsets it will fail to execute 
    if (isset($_SESSION['merge_mode'])) unset($_SESSION['merge_mode']); 

    print $error; 
    return; 
} 

/** 
* Replace the value between two other values in a string 
* 
* @param string start delimeter 
* @param string end delimeter 
* @param string replacement 
* @param string original source 
* @param int limit replacement count 
* @return string 
*/ 
public static function replaceStringBetween($start, $end, $new, $source, $limit = 1) 
{ 
    $result = preg_replace('#('.preg_quote($start) . ')(.*)('.preg_quote($end) 
     . ')#is', '$1' . $new . '$3', $source, $limit, $count); 

    if ($count > 0) 
    { 
     self::$replacement_count++; 
     return $result; 
    } 
    $result = preg_replace ("#{$start}(.*){$end}#is", $new, $source, $limit, $count); 
    if ($count > 0) 
    { 
     self::$replacement_count++; 
     return $result; 
    } 
    return $source; 
} 

답변

1

setAttribute()DOMText 노드에서 작동하지 않습니다.

이 시도 :

DOMText 클래스있는 방법 setAttribute이 없기 때문이다
$keywords = $dom->createElement('meta'); 
+0

createElement를 시도했지만 수정을 지원하지 않습니다 : No Modification Allowed Error –

+0

'$ dom- > createElement()'는 나에게 잘 돌아 간다.'new DOMElement()를 사용하면 오류가 발생한다. – drudge

1

에 한번 더 추가 한 후 appendChild<head> 태그를 찾을 GetElementsByTagName를 사용합니다. . . 물건.

DOMNode->$nodeValue을 수정할 수도 있습니다.

+0

오류가 발생합니다. 나는 내 질문에 그것을 문서화했다. 어떤 도움을 주셔서 감사합니다. –

+0

@Noor 'createTextNode' 대신'createElement'을 사용해보세요 – jisaacstone

+0

createElement를 시도했지만 수정을 지원하지 않습니다 : No 수정 허용 오류 –

0

But I get an error: Call to undefined method DOMText::setAttribute()

. DOMElement에 하나 있습니다.

+0

위 코드를 업데이트했지만이 오류가 발생한다. setAttribute를 사용하여 오류가 수정되지 않는다. –

관련 문제