2012-10-16 3 views
16

내가이 html 코드를 가지고 :DOMElement 노드의 HTML 코드를 가져 오는 방법은 무엇입니까?

<html> 
    <head> 
    ... 
    </head> 
<body> 
    <div> 
    <div class="foo" data-type="bar"> 
     SOMECONTENTWITHMORETAGS 
    </div> 
    </div> 
</body> 

이미이 기능을 가진 "foo는"요소 (하지만 내용) 얻을 수 있습니다 :

private function get_html_from_node($node){ 
    $html = ''; 
    $children = $node->childNodes; 

    foreach ($children as $child) { 
    $tmp_doc = new DOMDocument(); 
    $tmp_doc->appendChild($tmp_doc->importNode($child,true)); 
    $html .= $tmp_doc->saveHTML(); 
    } 
    return $html; 
} 

을하지만 모두를 반환하고 싶습니다 HTML DOMElement의 태그 (그 속성 포함). 내가 어떻게 할 수 있니?

+0

'html_from_node''class = "foo"'를 얻으려는 경우 올바르지 않습니다. 이 작업을 수행하는 데는 쉽고 간단한 방법이 있습니다. –

+0

이 정보가 도움이됩니까? http://stackoverflow.com/questions/6366351/getting-dom-elements-by-class-name – EricG

+0

@webbandit 더 좋은 방법이 있다는 것을 알고 있습니다. 보여줘! – Xaver

답변

37

DOMDocument::saveHTML에 대한 선택적 인수를 사용하십시오. "이 요소 만 출력"이라고 표시됩니다.

return $node->ownerDocument->saveHTML($node); 

이 인수는 PHP 5.3.6에서만 사용할 수 있습니다. 그 전에는 대신 DOMDocument::saveXML을 사용해야합니다. 결과는 약간 다를 수 있습니다. 이미 문서에 대한 참조가있는 경우 또한, 당신은이 작업을 수행 할 수 있습니다

$doc->saveHTML($node); 
+0

이것은 실제로 필요한 것이지만 버전 3.4에서 작동해야하는 WordPress 플러그인 용이며이 버전에는 PHP 5.2.4가 필요합니다. – Xaver

+0

@revaxarts 그런 다음'saveXML'을 사용하십시오. 출력은 조금 다를 것입니다 ... – lonesomeday

+0

u는 완전한 예제를 가르쳐 줍니까? 나는 노드에서만 함수에있는 문서에 대한 참조를 가지고 있지 않으며'DOMDocument :: saveXML ($ node)'이'$ node-> saveXML ($ node) '와 동일하게 작동하지 않는다 – Xaver

관련 문제