Grep инструмент для XML

16886
Adam Matan

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

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

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

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

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

22

5 ответов на вопрос

21
Ludwig Weinzierl

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

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

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

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

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

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

Удалить косую черту из первой ссылки. Bkkbrad 15 лет назад 0
Я не могу заставить его работать ... Он никогда не совпадает ни с одним xpath, кроме '/' (весь документ), что довольно бесполезно :( Hendy Irawan 12 лет назад 0
@HendyIrawan - Вы уверены, что это не то, как вы пытаетесь использовать xpath? (Как ваш XML имеет пространство имен по умолчанию, которое вы не учитываете?) Daniel Haley 12 лет назад 0
Я пытался его клонировать, но похоже, что хранилище сломано. Hola Soy Edu Feliz Navidad 6 лет назад 0
5
jweede

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

5
Peter Mortensen

Инструмент, который работает под 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, около двух страниц. Другой:

Я исправил неработающую ссылку, но ссылка на дамп данных также не работает. Я посмотрю что я могу сделать. Peter Mortensen 7 лет назад 0
0
fretje

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

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

0
JP Alioto

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