"cинхронизация" XML-файлов

Crys

Двинутый новичок
"cинхронизация" XML-файлов

В общем, есть два языковых xml-файла.
Структура в них должна быть одинаковая, но в реальности очень часто один файл содержит данные, которых еще нет во втором.
Так вот, можно ли как-то "синхронизировать" это дело так, чтобы если нет какого-то элемента в одном файле, добавить этот элемент из другого файла?
 

AmdY

Пью пиво
Команда форума
хи можно, например парсиши один и другой файл, работаешь как с массивом, записавыешь результат в xml. Я так делаю, только у меня не xml, а файл php, который я формирую.
можно ещё обойти файлы как DOM, добавля недостающие ноды, просто я пока пишу на рнр4, мне первый вариант ближе.
 

voituk

прозревший
А погуглить слабо?
http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=oJW&q=man+merge&btnG=Search
 

inTox

вёбных дел мастер
если это необходимо только на уровне вывода через XSLT можно использовать document().
 

Crys

Двинутый новичок
А погуглить слабо?
http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=oJW&q=man+merge&btnG=Search
И? Каким боком оно относится к поставленной задаче?

-~{}~ 19.02.07 19:10:

если это необходимо только на уровне вывода через XSLT можно использовать document().
Нет, именно в XML надо. Применимо к файлам. Например, русская и английская версия:

ru.xml:

<data>
<n1>Пункт 1</n1>
<n2>Пункт 2</n2>
</data>

en.xml:

<data>
<n1>Punkt 1</n1>
</data>


После преобразования надо en.xml:

<data>
<n1>Punkt 1</n1>
<n2>Пункт 2</n2>
</data>

-~{}~ 19.02.07 19:12:

Пока что вижу единственный нормальный способ - обход через DOM. Но там такой изврат при доступе к элементам :(
 

AmdY

Пью пиво
Команда форума
Автор оригинала: Crys
Для XML? Ты ничего не путаешь?
xml распарсить в массив и работать с ним как с массивом (array_diff*), а затем обратно в xml.
 

AmdY

Пью пиво
Команда форума
Автор оригинала: Crys
AmdY
Атрибуты тоже?
<data>
<n1>Пункт 1</n1>
<n2>Пункт 2</n2>
</data>
???
я поделился одним из вариантов, не нужно усложнять переводчик.
кстати, если ты не интерпретируешь xml в пхп массив, то стоит задуматься, ведь работа с массивом в пхп значительно проще и быстрее чем с xml.

Всё, рабочий день закончен, пойду шары катать, если есть вопроссы, то завтра.
 

Crys

Двинутый новичок
кстати, если ты не интерпретируешь xml в пхп массив, то стоит задуматься, ведь работа с массивом в пхп значительно проще и быстрее чем с xml.
Всё-таки задумываться над этим мне не стоит.
 

alekciy

Новичок
Crys
Многое зависит от структуры XML. DTD то есть к ним? На вскидку просто рекурсивно считывай в каждом файле потомков элемента, загон их в массив и, как уже предлагал AmdY, сравнивать схождения массивов. Нужно сравнивать атрибуты? В чем проблема, так же рекурсивно считывать атрибуты. Но лучше задумать, а правильно ли данная XML проектирована, если возникает такая задача? Может можно изменить/упростить?
 

Crys

Двинутый новичок
Но лучше задумать, а правильно ли данная XML проектирована, если возникает такая задача? Может можно изменить/упростить?
Спроектирована она отлично. А вот лучше использовать xml или массивы - меня не спрашивали. Нужен xml, значит вариантов на данный момент нет.

Нужно сравнивать атрибуты? В чем проблема, так же рекурсивно считывать атрибуты.
А вот с этим и проблема. Уже полгода не получается решить эту задачу. Нужно не только сравнить и вывести разницу, но и изменить второй файл с xml


Все вам не так и не эдак.
Потому что нормальных предложений было только два -
от alekciy и AmdY (первый пост). Остальное - трёп, не относящийся к сабжу.

-~{}~ 20.02.07 20:16:

Ладно.. Буду дальше сам мучаться :) Всем спасибо за участие.
 
Сверху