htmlpagedom icon indicating copy to clipboard operation
htmlpagedom copied to clipboard

Cannot replace root element when multiple root node

Open shtse8 opened this issue 8 years ago • 3 comments

Code:

$c = new HtmlPageCrawler('<p>Paragraph 1</p> <p>Paragraph 2</p><p>Paragraph 3</p>');
$c->filter('p')->first()->each(function($element) {
	$element->replaceWith('ff');
});
echo $c->saveHTML();

Expected:

ff <p>Paragraph 2</p><p>Paragraph 3</p>

Actual:

<p>Paragraph 1</p> <p>Paragraph 2</p><p>Paragraph 3</p>

shtse8 avatar Feb 28 '17 20:02 shtse8

But it works with:

$c = new HtmlPageCrawler('<div><p>Paragraph 1</p> <p>Paragraph 2</p><p>Paragraph 3</p></div>');
$c->filter('p')->first()->each(function($element) {
	$element->replaceWith('ff');
});
echo $c->saveHTML();

Result:

<div>ff <p>Paragraph 2</p> <p>Paragraph 3</p></div>

shtse8 avatar Mar 01 '17 05:03 shtse8

Error occurs in the following code:

$c = new HtmlPageCrawler('<p>Paragraph 1</p> <p>Paragraph 2</p><p>Paragraph 3</p>');
$c->filter('p')->first()->each(function($element) {
	$element->replaceWith('ff');
});
$c->filter('p')->first()->each(function($element) {
	$element->replaceWith('dd');
});
echo $c->saveHTML();

Result:

PHP Fatal error:  Uncaught Error: Call to a member function replaceChild() on null in /var/www/site/www/core/vendor/wa72/htmlpagedom/src/HtmlPageCrawler.php:652
Stack trace:
#0 /var/workspace/test10.php(13): Wa72\HtmlPageDom\HtmlPageCrawler->replaceWith(Object(Wa72\HtmlPageDom\HtmlPageCrawler))
#1 /var/www/site/www/core/vendor/symfony/dom-crawler/Crawler.php(371): {closure}(Object(Wa72\HtmlPageDom\HtmlPageCrawler), 0)
#2 /var/workspace/test10.php(14): Symfony\Component\DomCrawler\Crawler->each(Object(Closure))
#3 {main}
  thrown in /var/www/site/www/core/vendor/wa72/htmlpagedom/src/HtmlPageCrawler.php on line 652

shtse8 avatar Mar 01 '17 16:03 shtse8

Any feedback for this? This is quite annoying....

helariL avatar Jun 21 '18 14:06 helariL