private function visitChildren(\DOMNode
$domNode, Cursor
$cursor): void
{ /** @var \DOMNode $child */
foreach ($domNode->childNodes ??
[] as $child) { if ('#text' ===
$child->nodeName
) { // Add text directly for performance
$cursor->node->
addChild(new TextNode($cursor->node,
$child->nodeValue
));
} elseif (!
$child instanceof \DOMText
) { // Otherwise continue the visit recursively
// Ignore comments for security reasons (interpreted differently by browsers)
$this->
visitNode($child,
$cursor);
} } } /**
* Set attributes from a DOM node to a sanitized node.
*/
private function setAttributes(string
$domNodeName, \DOMNode
$domNode, Node
$node, array
$allowedAttributes =
[]): void
{ /** @var iterable<\DOMAttr> $domAttributes */
if (!
$domAttributes =
$domNode->attributes ?
$domNode->attributes->
getIterator() :
[]) {