Разность XML: Как генерировать разность XML с помощью XSLT?

Идентификаторы должны быть уникальными. КЛАССЫ должны быть совместно использованы. Так, если у Вас есть некоторый CSS, форматирующий, который будет применен к нескольким DIV, использовать класс. Если всего один (как требование, не как случайность), используют идентификатор.

22
задан Vincent 20 November 2009 в 15:44
поделиться

4 ответа

Есть способы сделать это, но я бы не сказал, что это просто.

В прошлом я использовал утилиту с открытым исходным кодом под названием diffmk , это дает выходной XML с дополнительными тегами, показывающими, что было добавлено / удалено ...

Мне пришлось написать дополнительную таблицу стилей, чтобы затем преобразовать ее в более читаемый HTML-отчет.

Некоторые инструменты сравнения, такие как XMLSpy Diff dog, хороши, но дорого.

1
ответ дан 29 November 2019 в 05:48
поделиться

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

Вы можете использовать средство XSL для включения пользовательских функций и написать что-то действительно красивое. Но я действительно этого не вижу.

Если бы я сделал что-то подобное, я бы обработал два XML-файла параллельно, используя DOM4J, что позволяет мне легко перемещаться по коду программно и выполнять подробные подзапросы.

6
ответ дан 29 November 2019 в 05:48
поделиться

XSLT управляется данными, то есть он просматривает единственный исходный XML-файл сверху вниз в поисках совпадений с шаблоном в таблице стилей XSL. Шаблоны на самом деле не знают, где они находятся в данных, они просто запускают свой код при сопоставлении. Вы можете ссылаться на другой источник XML, но программа будет работать в соответствии с обходом исходного источника.

Итак, когда вы дойдете до n-го дочернего элемента , например, вы можете найти n-й дочерний элемент во втором XML, используя document () функция. Но полезность этого зависит от структуры вашего XML и того, какие сравнения вы пытаетесь сделать.

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

2
ответ дан 29 November 2019 в 05:48
поделиться

Это не загадка! Вот общие шаги:

  1. @carillonator прав насчет того, как XSLT обрабатывает документы. Чтобы упростить задачу, мы объединяем две версии ваших документов в один документ, который вы можете использовать для запуска XSLT-сравнения (вы можете сделать это через командную строку с помощью bash, или с любым языком программирования, который вы используете, или даже с другим XSLT-преобразование [труба]). Это просто инкапсуляция:

     
     <версия1>
     ... первая версия здесь
     
     <версия2>
     ... вторая версия здесь
     
    
    
  2. Затем мы прогоняем этот документ через наш XSLT diff, затем XSLT выполняет задачу простого обхода дерева и сравнения узлов между двумя версиями. Это может быть от очень простого (был ли элемент изменен? Перемещен? Удален?) До полусложного. Хорошее понимание XPath делает это довольно простым.

    Как некоторые говорили ранее, ваша работа в другой среде, поэтому вы ограничены по сравнению с такими инструментами, как Diff Dog. Однако преимущество наличия алгоритма в XSLT также может иметь реальную ценность.

Надеюсь, это помогло. Ура!

2
ответ дан 29 November 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: