Chcę wyodrębnić treść treści strony html wraz z tagname ich potomka. Podjąłem przykład html w ten sposób:php DOMDocument nodeName Właściwość zwracająca '#text' z nodeName
<html>
<head></head>
<body>
<h1>This is H1 tag</h1>
<h2>This is H2 tag</h2>
<h3>This is H3 tag</h3>
</body>
</html>
Zaimplementowałem kod php jak poniżej i działa poprawnie.
$d=new DOMDocument();
$d->loadHTMLFile('file.html');
$l=$d->childNodes->item(1)->childNodes->item(1)->childNodes;
for($i=0;$i<$l->length;$i++)
{
echo "<".$l->item($i)->nodeName.">".$l->item($i)->nodeValue."</".$l->item($i)->nodeName.">";
}
Ten kod działa perfekcyjnie, ale gdy próbowałem zrobić to za pomocą pętli foreach zamiast pętli, właściwość nodeName wracał „#text” z każdej rzeczywistej nodeName. Oto kod
$l=$d->childNodes->item(1)->childNodes->item(1)->childNodes;
foreach ($l as $li) {
echo $li->childNodes->item(0)->nodeName."<br/>";
}
Dlaczego tak jest?
Odkryto, że możesz rozwiązać kłótnię nextSibling rodziny DOM z nextElementSibling! Damn you ↵'s i – Leo