Сравнение 2 файлов XML с использованием PHP

Я хочу сравнить 2 больших файла xml и получить различия. Как ExamXML и DiffDog. Решение, которое я нашел, заключалось в одновременном циклическом просмотре всех дочерних узлов каждого файла и проверке их равенства. Но я понятия не имею, как этого добиться... Как мне перебрать все дочерние узлы и их свойства? Как я могу проверить, равен ли первый элемент первого файла первому элементу второго файла, равен ли второй элемент первого файла второму элементу второго файла и так далее?

У вас есть идея получше сравнить 2 файла xml?


person Community    schedule 02.12.2010    source источник
comment
Два элемента DOM можно сравнить на равенство с помощью ==.   -  person Jonah    schedule 02.12.2010
comment
Но мне нужно сравнить каждый узел и каждый атрибут. Мне нужно знать, какой узел отличается, и использовать его родителя для исправления другого документа.   -  person    schedule 02.12.2010


Ответы (4)


Вы вообще рассматривали использование XPath? Кажется, это простой способ захватить все дочерние узлы. Тогда вы сможете перебирать узлы и сравнивать атрибуты/textContent.

person Ben L.    schedule 02.12.2010

Я искал что-то для сравнения двух XML, как и вы, и нашел это решение, которое работает очень хорошо.

http://www.jevon.org/wiki/Comparing_Two_SimpleXML_Documents

Я надеюсь, что это поможет кому-то.

person harley    schedule 26.08.2011

Это может быть очень альтернативным решением для вас, но я бы сделал так.

Во-первых, я бы попытался преобразовать формат во что-то гораздо более управляемое, например, в массив, чтобы преобразовать XML в массив.

http://www.bytemycode.com/snippets/snippet/445/

Это некоторый простой код, чтобы сделать именно это.

Затем в PHP есть функция array_diff(), которая может показать вам различия.

http://www.php.net/manual/en/function.array-diff.php

Это может сработать или не сработать для вас, учитывая, что вам нужно делать с различиями, но если вы хотите просто идентифицировать их и действовать в соответствии с ними, это может быть очень быстрым решением вашей проблемы.

person Mech Software    schedule 02.12.2010
comment
Я уже думал об этом и попробовал, но файлы xml, которые мне нужно загрузить, ОЧЕНЬ большие (документы .docx), и я легко заполнил бы свой баран. И эта функция не работает с большими файлами xml. - person ; 02.12.2010

Попробуйте расширение xmldiff

http://pecl.php.net/xmldiff

Он основан на той же библиотеке, что и Perl-модуль DifferenceMarkup, вы получите различный XML-документ и даже сможете выполнить слияние.

person Maximilian    schedule 10.10.2013