nyaload

Журнал Пушыстого

Журнал Пушыстого

Entries by tag: xml

xml grep
nyaload
_winnie
Хочу порекомендовать тулзу XMLStarlet, ей удобно выцепить что-то из xml-ки при помощи XPath. Из вывода svn --xml, из проектных файлов Visual Studio/IDEA, из конфигов, и тд. Хорошо стыкуется с пайпами, xargs.

Для Windows можно скачать отсюда - http://xmlstar.sourceforge.net/download.php
В Linux с apt-get - apt-get install xmlstarlet

Примеры:
вывод svn stat --xmlCollapse )

Просто выцепить что-то из svn stat --xml:
svn stat --xml | xml sel -t -m "/status/target/entry/@path" -v . -n

Условия фильтрации записываются в квадратных скобках. Выцепить файлы с неким дополнительным условием (только модицицированные файлы):
svn stat --xml | xml sel -t -m "/status/target/entry[./wc-status/@item='modified']/@path" -v . -n

sel -t -m - это магия для создания XSLT преобразования. Хорошо бы быть поверхостно знакомым с XSLT для уверенного использования xml sel, хотя бы на уровне первых примеров. Или можно использовать просто так,
xml sel -t -m "XPath для поиска" -v "XPath для обработки найденного" -o "просто строка" -n

-v . - распечатать содержимое найденой ноды
-n - вставить перенос строки.

Конкретно у svn stat формат совместимый с обычным line-oriented тулзами, можно вместо xml использовать просто svn stat | grep '^M' | cut -c 9-. Но иногда нет возможности выбрать формат (проектные xml-файлы), или он плохо ложится на "список строчек"/"tab-delimited lines" (например, svn log --xml).
Tags: ,

(no subject)
nyaload
_winnie
При модификации xml при помощи DOM-библиотек есть проблема, что библиотека сохраняет xml в таком форматировании, в котором ей нравится. Например, удалил одно поле из xml, а текстовый diff показывает что изменилось ВСЁ. И редактировать руками потом такой документ неудобно, отступы нечеловеческие. Это связано с тем, что библитека превращает текст в дерево, и забывает про все те пробелы и пустые строки, которые поставил человек, про красивое форматирование атрибутов.

Помню, что я иногда использовал регулярные выражения для трансформации xml не потому, что так проще и быстрей чем DOM, а потому что изменение аккуратно производилось так же, как его делал бы человек - вставка символов в определённое место без изменения всего остального.

PS. диффы можно смотреть пересохранением файлов, и гугль с apt-cache говорят про существование неких xmldiff.
Tags: , ,

?

Log in