2015-01-19 6 views
0

HTML 조각을 DOMDocument에로드하고 수정 한 다음 다시 문자열로 변환합니다.PHP DOMDocument - 노드의 자식을 문자열로 저장 - 부모 노드 제외

내가 얻을 수있는 가장 가까운는이 ... 여기

$html_string = "<b>my html fragment</b><div>more child nodes</div>"; 
$doc_html = new DOMDocument(); 
$doc_html->loadHTML($html_string); 
//do stuff 
$html_string = $doc_html->saveHTML($doc_html->getElementsByTagName('body')->item(0)); 

문제는 loadHTML가 <html><body> 태그를 감싸고 있다는 것입니다. 그래서 난 그냥 몸 노드를 캐릭터 라인 화하는 getElementsByTagName를 사용하지만, 그것은 자기의 몸 노드 ...

<body><b>my html fragment</b><div>more child nodes</div></body> 

을 포함하지만, 난 그냥 입력 문자열 같은 자식 노드를 원한다.

모든 자식을 반복하고 결과 문자열에 req ex를 실행하여 연결하는 것 외에는이 작업을 수행하는 간단한 방법이 있습니까?

미터

+0

시도를 참조? saveHTML은 html DOCUMENT를 저장하려고합니다. 즉, 누락 된 body/html 태그를 추가합니다. –

+0

그래, 여전히 포함 노드를 직렬화합니다. 현재 저는 이것을 사용하고 있습니다 .. http://php.net/manual/en/class.domelement.php#101243 –

답변

0
<?php 
$doc = doc(); 
$xp = new DOMXpath($doc); 
$nl = $xp->query('//a'); 
foreach($nl as $n) { 
    $df = $doc->createDocumentFragment(); 
    $nodes = array(); 
    foreach($n->childNodes as $cn) { 
     $nodes[] = $cn; 
    } 
    foreach($nodes as $cn) { 
     $df->appendChild( $cn); 
    } 
    echo $doc->savexml($df); 
} 


function doc() { 
    $doc = new DOMDocument; 
    $doc->loadxml(<<< eox 
<doc> 
    <a> 
     <b>1</b> 
     <b>2</b> 
     <b>3</b> 
     <b>4</b> 
    </a> 
</doc> 
eox 
    ); 
    return $doc; 
} 

인쇄

<b>1</b> 
    <b>2</b> 
    <b>3</b> 
    <b>4</b> 

대신`saveXML` http://docs.php.net/domdocumentfragment

관련 문제