Extract Element Names

Andrey Helldar
Contributed by Andrey Helldar in #29127

The extract() method returns the attribute and/or node values from a given list of nodes. You can use the special attribute _text to get the value of nodes. In Symfony 4.3 you can also use the new special attribute _name to get the element name (the HTML tag name):

1
2
3
$attributes = $crawler->filterXPath('//body/*')
    ->extract(['_text', '_name', 'class'])
;

Default values for text() and html()

Roberto Espinoza
Contributed by Roberto Espinoza in #28581

When a node is empty, calling the text() and html() methods resulted in an \InvalidArgumentException with the well-known message "The current node list is empty.". In Symfony 4.3 these methods allow passing an argument that will be returned when the node is empty, so you can consider it a "default" value for the node:

1
2
3
4
5
// return an empty string instead of throwing an exception
$title = $crawler->filter('aside h3')->text('');

// return a default HTML content instead of throwing an exception
$userProfile = $crawler->filter('.user-profile')->html('<b>Anonymous User</b>');
Published in #Living on the edge