?

Log in

No account? Create an account
nyaload

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

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

Previous Entry Share Next Entry
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 --xml:
<?xml version="1.0"?>
<status>
    <target path=".">
        <entry
            path="hooks\hooks-data\cfg.branches\config.xml">
            <wc-status props="none" item="modified" revision="6483">
                <commit revision="6272">
                    <author>winnie</author>
                    <date>2010-11-27T20:48:40.388401Z</date>
                </commit>
            </wc-status>
        </entry>
    </target>
</status>



Просто выцепить что-то из 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: ,

  • 1
А sed'ом она работать не умеет?

... умеет. Польза.

юзает libxslt - польза :) (хорошо, что не жабовская)

А сравните с xqilla (command line) && kawa/qexo

насколько понял, оно внутри все это в xslt преобразует и запускает его на выполнение %)

Да, именно так. Если использовать двойные кавычки вместо одинарных, это даже видно в сообщениях об ошибке, что пытаются xpath сунуть в атрибут с двойными кавычками. У меня старая версия, не знаю исправляля ли в новых.


  • 1