<?php
/**
* Compares two datasets of DOM elements and outputs the differences.
*
* @param mixed $dataset1 The first dataset of DOM elements (array of DOMNode objects).
* @param mixed $dataset2 The second dataset of DOM elements (array of DOMNode objects).
* @return void Outputs the differences to the console.
*/
function diffDomDatasets($dataset1, $dataset2) {
if (!is_array($dataset1) || !is_array($dataset2)) {
echo "Error: Datasets must be arrays.\n";
return;
}
$len1 = count($dataset1);
$len2 = count($dataset2);
$maxLength = max($len1, $len2);
for ($i = 0; $i < $maxLength; $i++) {
if ($i >= $len1) {
echo "Dataset 1 has fewer elements, adding elements from Dataset 2.\n";
printDomElement($dataset2[$i]); // Output element from dataset 2
} elseif ($i >= $len2) {
echo "Dataset 2 has fewer elements.\n";
printDomElement($dataset1[$i]); // Output element from dataset 1
} else {
if ($dataset1[$i] !== $dataset2[$i]) {
echo "Difference at index $i:\n";
printDomElement($dataset1[$i]);
printDomElement($dataset2[$i]);
}
}
}
}
/**
* Prints a DOM element to the console (basic representation).
* @param DOMNode $node The DOMNode to print.
*/
function printDomElement(DOMNode $node) {
echo " Type: " . get_class($node) . "\n";
echo " Tag: " . $node->nodeName . "\n";
echo " Attributes: ";
foreach ($node->attributes as $attr) {
echo $attr->name . "=\"" . $attr->value . "\" ";
}
echo "\n";
}
//Example Usage (for testing)
/*
$doc1 = new DOMDocument();
$element1 = $doc1->createElement('div');
$element1->setAttribute('id', 'test1');
$element1->appendChild($doc1->createElement('p', 'First Element'));
$doc1->appendChild($element1);
$element2 = $doc1->createElement('div');
$element2->setAttribute('id', 'test1');
$element2->appendChild($doc1->createElement('p', 'Second Element'));
$doc1->appendChild($element2);
$dataset1 = [$doc1->getElementById('test1')];
$dataset2 = [$doc1->getElementById('test1')];
diffDomDatasets($dataset1, $dataset2);
*/
?>
Add your comment