LINUX.ORG.RU

Ищу утилиту сравнения для языков разметки

 , , ,


0

1

Привет, ЛОР.

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

Пример. В файлах .ui для Qt, помимо прочего, для каждой переводимой фразы указывается источник в программе, вплоть до номера строки. Я хочу этот атрибут заигнорить, чтобы результатом диффа были только добавленные и изменённые фразы, а изменившиеся номера строк в дифф не лезли.

Есть программа xml-diff, но она не про игнор, она про сортировку атрибутов перед сравнением (что тоже бывает важным, да).

Интересует также, есть ли такие программы для JSON или YAML, например.

★★★★★

Последнее исправление: hobbit (всего исправлений: 1)

А если предварительно выпилить эти некритичные атрибуты из XML (заигнорить «руками»), а потом уже натравить xml-diff? Звучит несложно.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)

Есть язык XSLT, довольно несложный в принципе. Им можно вырезать ненужные для сравнения атрибуты.

emorozov
()
Ответ на: комментарий от emorozov

Да, про XSLT и xmlstarlet знаю. Но это, скорее, инструменты для построения такого рода программы. Наверняка решение на этом будет рабочим, но для простых разовых задач будет сильно напоминать применение ударной силы микроскопа к гвоздям.

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Можно попробовать, например, перед диффом запустить sed с заменой по регулярке. В случае с .ui тогда и xml-diff не понадобится, обычный diff сойдёт.

Но это тоже три команды и два временных файла. Да, наверное, баш-скрипт может скрасить этот недостаток…

hobbit ★★★★★
() автор топика
Ответ на: комментарий от frob

Если ты про Qt, то у него свой аналог gettext, Qt Linguist. Поддерживаются разные контексты для переводимой фразы, комментарии и др. В некоторых сервисах коллективного перевода, например, Weblate, поддерживается и gettext, и qt linguist… и даже ещё что-то третье.

Но кутешные файлы я привёл только ради примера. Буквально вчера возникла ещё одна аналогичная задача, на сей раз по работе. Но тоже с XML. :)

hobbit ★★★★★
() автор топика
Ответ на: комментарий от Aceler

Видимо да. Я jq использовал, но только для форматирования, теги не фильтровал.

Другое дело, что это опять, как я писал выше, три команды, два временных файла. Юниксвей как он есть, со своими плюсами и минусами.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Ну так. Это ж linux. Откуда тут возьмутся готовые интегрированные комбайны, если каждый суслик будет собирать три команды?

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Для ЛЮБЫХ задач комбайнов, конечно, не надо. Но в данном случае мне начало казаться, что задача приобретает черты типовой.

Это как с nomenus-rex. Там тоже можно наколхозить на баше, но специализированная утилита может оказаться удобнее…

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Ну, просто конкретно для локализации есть специализированное решение с кучами всего вокруг.

А так, я думаю, что XSLT будет наиболее идеологически правильным.

(Не раскрыта тема «проблемы трёх команд и двух временных файлов» – чем это плохо-то?)

frob ★★★★★
()

Наверное, немного поможет dasel (на Go).

Comparable to jq / yq, but supports JSON, YAML, TOML, XML and CSV.

dataman ★★★★★
()
Ответ на: комментарий от ergo

Не знаю, я просто решил уточнить, правильно ли я понял задачу.

Aceler ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.