DOMNode의 innerHTML을 얻는 방법?
PHPDOMNode의 innerHTML을 얻는 방법?
PHP DOM 구현에서 주어진 DOMNode의 innerHTML을 얻기 위해 사용하는 함수는 무엇입니까? 신뢰할 수있는 솔루션을 제공 할 수 있습니까?
물론 outerHTML도 그렇게 할 것입니다.
해결법
-
==============================
1.
이 업데이트 된 변형을 PHP와 비교해보십시오. Manual User Note # 89718 :
<?php function DOMinnerHTML(DOMNode $element) { $innerHTML = ""; $children = $element->childNodes; foreach ($children as $child) { $innerHTML .= $element->ownerDocument->saveHTML($child); } return $innerHTML; } ?>
예:
<?php $dom= new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->load($html_string); $domTables = $dom->getElementsByTagName("table"); // Iterate over DOMNodeList (Implements Traversable) foreach ($domTables as $table) { echo DOMinnerHTML($table); } ?>
-
==============================
2.
다음은 함수형 프로그래밍 스타일의 버전입니다.
function innerHTML($node) { return implode(array_map([$node->ownerDocument,"saveHTML"], iterator_to_array($node->childNodes))); }
-
==============================
3.
요소의 html을 반환하려면 C14N ()을 사용할 수 있습니다.
$dom = new DOMDocument(); $dom->loadHtml($html); $x = new DOMXpath($dom); foreach($x->query('//table') as $table){ echo $table->C14N(); }
-
==============================
4.
하임 에이지 (Haim Evgi)의 대답을 단순화 한 버전입니다.
<?php function innerHTML(\DOMElement $element) { $doc = $element->ownerDocument; $html = ''; foreach ($element->childNodes as $node) { $html .= $doc->saveHTML($node); } return $html; }
사용 예 :
<?php $doc = new \DOMDocument(); $doc->loadHTML("<body><div id='foo'><p>This is <b>an <i>example</i></b> paragraph<br>\n\ncontaining newlines.</p><p>This is another paragraph.</p></div></body>"); print innerHTML($doc->getElementById('foo')); /* <p>This is <b>an <i>example</i></b> paragraph<br> containing newlines.</p> <p>This is another paragraph.</p> */
preserveWhiteSpace 또는 formatOutput을 설정할 필요가 없습니다.
-
==============================
5.
trincot의 멋진 버전 인 array_map과 implode에 더해서 이번에는 array_reduce를 사용합니다 :
return array_reduce( iterator_to_array($node->childNodes), function ($carry, \DOMNode $child) { return $carry.$child->ownerDocument->saveHTML($child); } );
아직도 이해가 안되는데 왜 배열과 반복자를 모두 받아들이는 reduce () 메소드가 없다.
-
==============================
6.
function setnodevalue($doc, $node, $newvalue){ while($node->childNodes->length> 0){ $node->removeChild($node->firstChild); } $fragment= $doc->createDocumentFragment(); $fragment->preserveWhiteSpace= false; if(!empty($newvalue)){ $fragment->appendXML(trim($newvalue)); $nod= $doc->importNode($fragment, true); $node->appendChild($nod); } }
from https://stackoverflow.com/questions/2087103/how-to-get-innerhtml-of-domnode by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PHP로 JSON POST 받기 (0) | 2018.09.04 |
---|---|
사용자의 비밀번호를 안전하게 저장하려면 어떻게해야합니까? (0) | 2018.09.03 |
PHP 코드 / 파일을 HTML (.html) 파일에 어떻게 추가합니까? (0) | 2018.09.03 |
IN 절 배열로 PDO 사용하기 (0) | 2018.09.03 |
PHP에서 친숙한 URL을 만드는 방법? (0) | 2018.09.03 |