Phiên bản PHPUnit nào đây? Tôi khá chắc chắn các phiên bản gần đây tất cả hỗ trợ so sánh DomDocument.
Phiên bản ngắn: Sử dụng cài đặt $doc->preserveWhiteSpace
để xóa khoảng trắng và sau đó sử dụng $doc->C14N()
để tách nhận xét và nhận chuỗi mà bạn có thể so sánh.
OK, đây là tập lệnh bạn có thể phát, lưu ý rằng các dòng EOD;
không thể có bất kỳ dấu cách hoặc khoảng trắng phía trước nào.
$x1 = <<<EOD
<responses>
<response id="12">
<foo>bar</foo>
<lorem>ipsum</lorem>
<sit>dolor</sit>
<!--This is a comment -->
</response></responses>
EOD;
$x2 = <<<EOD
<responses>
<response id="12">
<lorem>ipsum</lorem><sit>dolor</sit>
<foo>bar</foo>
<!--This is another comment -->
</response>
</responses>
EOD;
// Khối tiếp theo là một phần của cùng một tệp, tôi chỉ thực hiện việc định dạng này sao cho hệ thống đánh dấu cú pháp StackOverflow không bị nghẹt thở.
$USE_C14N = true; // Try false, just to see the difference.
$d1 = new DOMDocument(1.0);
$d2 = new DOMDocument(1.0);
$d1->preserveWhiteSpace = false;
$d2->preserveWhiteSpace = false;
$d1->formatOutput = false; // Only useful for "pretty" output with saveXML()
$d2->formatOutput = false; // Only useful for "pretty" output with saveXML()
$d1->loadXML($x1); // Must be done AFTER preserveWhiteSpace and formatOutput are set
$d2->loadXML($x2); // Must be done AFTER preserveWhiteSpace and formatOutput are set
if($USE_C14N){
$s1 = $d1->C14N(true, false);
$s2 = $d2->C14N(true, false);
} else {
$s1 = $d1->saveXML();
$s2 = $d2->saveXML();
}
echo $s1 . "\n";
echo $s2 . "\n";
Output với $USE_C14N=true;
<responses><response id="12"><foo>bar</foo><lorem>ipsum</lorem><sit>dolor</sit></response></responses>
<responses><response id="12"><lorem>ipsum</lorem><sit>dolor</sit><foo>bar</foo></response></responses>
Output với $USE_C14N=false;
<?xml version="1.0"?>
<responses><response id="12"><foo>bar</foo><lorem>ipsum</lorem><sit>dolor</sit><!--This is a comment --></response></responses>
<?xml version="1.0"?>
<responses><response id="12"><lorem>ipsum</lorem><sit>dolor</sit><foo>bar</foo><!--This is another comment --></response></responses>
Lưu ý rằng $doc->C14N()
có thể chậm hơn, nhưng tôi nghĩ rằng có vẻ như khả năng tước ra ý kiến là mong muốn. Lưu ý rằng tất cả điều này cũng giả định rằng khoảng trống trong XML của bạn không quan trọng và có thể một số trường hợp sử dụng mà giả định đó không đúng ...
cách xóa tất cả các khoảng trắng và sau đó so sánh có dấu băm sha1? –