Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DOMDocument - childNodes łączy wszystkie paragrafy 1 jeden #text node
Forum PHP.pl > Forum > PHP
adbacz
Mam taki oto kodzik:
  1. libxml_use_internal_errors(true);
  2. $html = '<html><head><meta charset="UTF-8"/></head><body><div id="CONTAINER">'.content.'</div></body></html>';
  3. $doc = new DOMDocument('1.0', 'utf-8');
  4. $doc->loadHTML($html);
  5. $root = $doc->getElementById('CONTAINER');
  6. $childNodes = $root->childNodes;


I teraz w zmiennej $childNodes mam listę dzieci elementu o id 'CONTAINER'. W tej treści są elementy <p>, <blockquote>, <img> i <figure>. W sumie tych elementów jest jakieś 30, ale wg pętli foreach, jest ich tylko 19. Ponieważ DOMDocument twierdzi, że każdy <p> który znajdzie jeden obok drugiego, tworzy jako element #text i teraz, jak mam 5x<p> obok siebie w dokumencie, to w pętli mam je wszystkie jako JEDEN element #text.

Jak to rozwiązać, by faktycznie były to elementy pojedyncze, a nie jak teraz, pogrupowane po typie (jeśli leżą obok siebie w dokumencie)? Potrzebuje dokładnie policzyć elementy, ponieważ muszę w środek wrzucić dodatkowy element, a jak mi oblicza w ten sposób to nie mam prawidłowej ilości elementów.
trueblue
Dla:
  1. $html = '<html><head><meta charset="UTF-8"/></head><body><div id="CONTAINER"><p>a</p><p>b</p><span>a</span><div>abc</div></div></body></html>';

mam 4 elementy.
Czy czasem paragrafy nie są zamienione w encje html?
adbacz
Pytasz o to, czy czasem nie jest tak:
Kod
<p></p>

questionmark.gif

Jeśli o to, to wszystko jest poprawnie, ponieważ sprawdzałem i w źródle przed wykonaniem tego kodu, i wyświetlałem $child->nodeValue i nie było żadnych elementów HTML, żadnych encji, sam tekst bez znaczników.
trueblue
Tak.
Nie?
adbacz
hehe, chyba znalazłem niechcący błąd forum biggrin.gif

Miałem encje HTML w kodzie powyżej, jak widziałeś, zrobiłem edycję szybką, i po zapisaniu i odświeżeniu już nie ma encji - jak widać teraz biggrin.gif

-----------


Wszystko jest poprawnie, ponieważ sprawdzałem i w źródle przed wykonaniem tego kodu, i wyświetlałem $child->nodeValue i nie było żadnych elementów HTML, żadnych encji, sam tekst bez znaczników.
trueblue
Teraz to już nie wiem jaki masz oryginalny content.
Czy jest tam <p> czy &lt;p&gt;
adbacz
Tutaj forum popsuło coś i encje zamieniły mi się na znaczniki HTML w kodzie w poprzednim poście.

Oryginalny content to zwykłe znaczniki HTML, bez encji. Sprawdzałem w źródle strony po wykonaniu echo i jest HTML (są znaczniki <p>) bez encji.
trueblue
A jaką ilość otrzymujesz podstawiając moje $html?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.