您可以使用DOMElement :: C14N()來獲取DOMElement的規範化HTML(XML)表示,或者如果您想要更多控件,以便可以過濾某些元素和屬性,則可以使用類似下面的內容:
function toHTML($nodeList, $tagsToStrip=array('script','object','noscript','form','style'),$attributesToSkip=array('on*')) {
$html = '';
foreach($nodeList as $subIndex => $values) {
if(!in_array(strtolower($values->nodeName), $tagsToStrip)) {
if(substr($values->nodeName,0,1) != '#') {
$html .= ' <'.$values->nodeName;
if($values->attributes) {
for($i=0;$values->attributes->item($i);$i++) {
if(!in_array(strtolower($values->attributes->item($i)->nodeName) , $attributesToSkip) && (in_array('on*',$attributesToSkip) && substr(strtolower($values->attributes->item($i)->nodeName) ,0 , 2) != 'on')) {
$vvv = $values->attributes->item($i)->nodeValue;
if(in_array(strtolower($values->attributes->item($i)->nodeName) , array('src','href'))) {
$vvv = resolve_href($this->url , $vvv);
}
$html .= ' '.$values->attributes->item($i)->nodeName.'="'.$vvv.'"';
}
}
}
if(in_array(strtolower($values->nodeName), array('br','img'))) {
$html .= ' />';
} else {
$html .= '> ';
if(!$values->firstChild) {
$html .= htmlspecialchars($values->textContent , ENT_COMPAT , 'UTF-8' , true);
} else {
$html .= toHTML($values->childNodes,$tagsToStrip,$attributesToSkip);
}
$html .= ' </'.$values->nodeName.'> ';
}
} elseif(substr($values->nodeName,1,1) == 't') {
$inner = htmlspecialchars($values->textContent , ENT_COMPAT , 'UTF-8' , true);
$html .= $inner;
}
}
}
return $html;
}
echo toHTML($table);
謝謝。我有關於選擇的問題。如果我想獲得與特定ID的第一個表格,我應該怎麼做?類似$元件= $ dom->的getElementById( 'mydiv') - >則firstChild( '表'); ?? – max
我會做'$元件= $ dom->的getElementById( 'mydiv') - >的getElementsByTagName( '表') - >項(0);' - 'firstChild'是一個屬性,而不是方法。如果你想表是div的第一個子元素,但'的getElementsByTagName()'是安全的,你可以使用'firstChild'。就方法名稱和機制而言,這與Javascript相同,除了PHP需要使用['item()'](http://php.net/manual/en/domnodelist.item.php)<= 5.3 ,因爲PHP直到5.4才支持[數組解引用](http://schlueters.de/blog/archives/138-Features-in-PHP-trunk-Array-dereferencing.html)。 – DaveRandom