22

Я ищу хороший инструмент для выполнения grep-подобных операций над XML - например, извлечение только определенных атрибутов.

Сам Grep не может справиться с этим - любой DFA-эквивалентный инструмент может обрабатывать только нерекурсивные совпадения, а мой может быть рекурсивным.

Я попробовал xgrep, но он довольно нестабилен, и я хочу стабильный и надежный инструмент.

Любые рекомендации?

РЕДАКТИРОВАТЬ: Я предпочитаю инструменты с открытым исходным кодом, которые хорошо работают под Linux.

5 ответов5

21

XMLStarlet (Википедия) - инструмент командной строки, близкий к grep .  Это программное обеспечение с открытым исходным кодом (лицензия MIT) и хорошо работает на Linux и Windows.

Веб-сайт XMLStarlet описывает это следующим образом.

XMLStarlet - это набор утилит командной строки (инструментов), которые можно использовать для преобразования, запроса, проверки и редактирования документов и файлов XML, используя простой набор команд оболочки, аналогично тому, как это делается для файлов простого текста с использованием UNIX grep, sed, команды awk, diff, patch, join и т. д.

Пакет Debian/Ubuntu называется xmlstarlet . Но будьте осторожны: в противоположность тому, что написано на man- странице, в Debian/Ubuntu двоичный файл называется xmlstarlet а не xml .

Есть также двоичные файлы Windows на SourceForge.

Небольшое введение смотрите в статье IBM Start, работающей с XMLStarlet.

5

Инструмент, который работает под Linux - это xml_grep. Он полностью понимает XML и не является построчным инструментом.

xml_grep включен как автономный инструмент в пакет XML::Twig . Функциональность grepping довольно мощная, поскольку она поддерживает спецификации XPath .

Пример командной строки (извлечение сообщений, отредактированных после середины февраля, из дампа данных триологии):

xml_grep -p --cond="row[@LastEditDate>'2010-02-14']"  posts.xml  > lateEditedPosts.xml

Установка проста. Или

  • sudo cpan -i "XML::Twig" , как описано в кулинарной книге xml_grep, указанной ниже.

или же


Дополнительная информация:

Лучшее введение, которое я нашел для xml_grep - это кулинарная книга xml_grep, около двух страниц. Другой:

5

Синтаксис XPath на разных языках лучше всего подходит для поиска в XML. Фактически, одним из инструментов, рекомендованных создателями xgrep, является в основном анализатор Perl XML, который принимает ввод XPath.

0

Я бы посоветовал НЕ использовать grep-подобный инструмент для XML, но использовать библиотеку для анализа XML вместо него.
Для чего именно это нужно? Любой язык программирования? Я думаю, что встроенный синтаксический анализатор .NET легко подойдет, если вы захотите написать для него программу.

Обновление: для Linux хорошо известная библиотека синтаксического анализатора XML - libxml2.

0

XMLSpy - удивительный инструмент, хотя и немного затратный.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .