Я ищу хороший инструмент, чтобы выполнить подобные grep операции на XML - например, извлечь определенные атрибуты только.
Grep
самостоятельно не может обработать его - любой DFA-эквивалентный инструмент может обработать только не рекурсивные соответствия, и мой может быть рекурсивным.
Я попробовал xgrep, но это довольно нестабильно, и я хочу стабильный и надежный инструмент.
Какие-либо рекомендации?
Править: Я предпочитаю инструменты с открытым исходным кодом, которые работают хорошо в соответствии с Linux.
XMLStarlet (Википедия) является инструментом командной строки, который близко подходит grep
. Это - программное обеспечение с открытым исходным кодом (лицензия MIT) и работает хорошо над Linux и Windows.
Веб-сайт XMLStarlet описывает это следующим образом.
XMLStarlet является рядом утилит командной строки (инструменты), которые могут использоваться для преобразования, запросить, проверить, и отредактировать XML-документы и файлы с помощью простого набора команд оболочки похожим способом, которым он сделан для файлов простого текста с помощью UNIX grep, sed, awk, разности, управляет патч, соединение, и т.д.
Пакет Debian/Ubuntu называют xmlstarlet
. Но остерегайтесь: Вопреки тому, что говорит страница справочника, называют двоичный файл xmlstarlet
в Debian/Ubuntu и нет xml
.
На SourceForge существуют также двоичные файлы Windows.
Для миленького введения посмотрите, что Запуск IBM работает с XMLStarlet.
Синтаксис XPath на различных языках является лучшим для нахождения вещей в xml. На самом деле один из инструментов, рекомендуемых производителями xgrep, является в основном Perl синтаксический анализатор XML, который принимает вход XPath.
Я советовал бы, чтобы НЕ использовать подобный grep инструмент на XML, но пользоваться библиотекой для парсинга XML в земельном участке.
Для чего точно Вы нуждаетесь в нем? Какой-либо язык программирования? Я думаю.NET, встроенный синтаксический анализатор XML соответствовал бы заданию легко, если Вы готовы записать программу для него все же.
Обновление: для Linux известная библиотека синтаксического анализатора XML является libxml2.
Инструмент, который работает в соответствии с Linux, является xml_grep. Это полностью понимает XML и не линию за линией инструмент.
xml_grep включен как автономный инструмент в XML:: пакет Ветки. Держащая функциональность довольно мощна, поскольку она поддерживает спецификации XPath.
Демонстрационная командная строка (извлекающий сообщения, отредактированные с середины февраля от triology Дампа Данных):
xml_grep -p --cond="row[@LastEditDate>'2010-02-14']" posts.xml > lateEditedPosts.xml
Установка легка. Также
sudo cpan -i "XML::Twig"
, как описано в xml_grep поваренной книге, на которую ссылаются ниже.или
Загрузите http://xmltwig.org/xmltwig/XML-Twig-3.34.tar.gz или http://search.cpan.org/CPAN/authors/id/M/MI/MIROD/XML-Twig-3.34.tar.gz. Например. wget http://search.cpan.org/CPAN/authors/id/M/MI/MIROD/XML-Twig-3.34.tar.gz
Извлечение: gunzip XML-Twig-3.34.tar.gz; tar -xvf XML-Twig-3.34.tar
Перейдите в в папку: cd XML-Twig-3.34
Установка: perl Makefile.PL -y
. Затем make
, make test
и sudo make install
.
Больше информации:
Лучшее введение, которое я нашел для xml_grep, является xml_grep поваренной книгой, приблизительно две страницы.Другое: