2012-08-24 2 views
1

특정 태그에서 html 코드를 검색하고 싶습니다. DomDocument가 가능하다는 것을 알고 있습니다. 그러나 외부 태그없이 내용을 추출하려면 어떻게해야합니까? 예를 들어PHP에서 외부 태그가없는 특정 태그에서 Html 내용 추출

,

$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';  
$doc = new DOMDocument; 
$doc->loadHTML($html); 
echo $doc->saveXML($doc->getElementsByTagName('div')->item(0)); 

이 출력됩니다,

<div> 
    <span>Hello world!</span> 
    <br> 
    <p>some other text</p> 
</div> 

나는 바깥 쪽 div 태그없이합니다. 노드 값을 시도했지만 모든 태그를 제거합니다.

$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';  
$doc = new DOMDocument; 
$doc->loadHTML($html); 
$node = $doc->getElementsByTagName('div')->item(0); 
echo $node->nodeValue; 

아이디어가 있으십니까?

+0

당신이 정말 이해가되지 않습니다 요구하고, 당신이 태그와 그 내용을 요청하지만 당신이 원하지 않는 말을 꼬리표. 당신이 원하는 태그를 알고 있기 때문에 정규식을 사용하여 간단하게 제거 할 수 있습니다. 또는 원하는 태그를 선택하고 외부 태그를 사용하지 않아도됩니다. – deed02392

+0

질문이 올바르게되었습니다. 그것은 질문이 의미가 있음을 의미합니다. 간단하다고 생각한다면 해결책을 게시 할 수 있습니까? – Teno

+0

나는 그것이 의미가 있다는 것에 동의하고, 때때로 나는 잊어 버린다. 나는 당신을 위해 일해야 해결책을 게시했습니다. – deed02392

답변

4

좋아, 어떻게 PHP innerHTML을 구현에 대한 :

<?php 
$html = '<div><span>Hello world!</span><br><p>some other text</p></div>';  
$doc = new DOMDocument; 
$doc->loadHTML($html); 
$node = $doc->getElementsByTagName('div')->item(0); 
echo DOMinnerHTML($node); 

function DOMinnerHTML($element) 
{ 
    $innerHTML = ""; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
     $tmp_dom = new DOMDocument(); 
     $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
     $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
    return $innerHTML; 
} 
?> 
+0

완벽한, 감사합니다. – Teno

+0

또는 DOMDocument 대신 DOMDocumentFragment를 사용하십시오 ... – VolkerK

관련 문제