При выполнении сценариев оболочки, как правило, данные будут в файлах однострочных записей, таких как CSV. Это действительно просто обрабатывать эти данные с помощью grep
и sed
. Но мне часто приходится иметь дело с XML, поэтому мне бы очень хотелось, чтобы скрипт мог получить доступ к этим XML-данным через командную строку. Каковы лучшие инструменты?
xml
command-line
scripting
Джозеф Холстен
источник
источник
Ответы:
Я обнаружил, что xmlstarlet довольно хорош в подобных вещах.
http://xmlstar.sourceforge.net/
Также должно быть доступно в большинстве дистрибутивов. Вводное руководство здесь:
http://www.ibm.com/developerworks/library/x-starlet.html
источник
Некоторые перспективные инструменты:
nokogiri : анализ HTML / XML DOM в ruby с использованием селекторов XPath и CSS
hpricot : устарел
fxgrep : использует собственный XPath-подобный синтаксис для запроса документов. Написано на SML, поэтому установка может быть затруднена.
LT XML : XML инструментарий , полученный из инструментов SGML, в том числе
sggrep
,sgsort
,xmlnorm
и другие. Использует собственный синтаксис запроса. Документация очень формальная. Написано на C. LT XML 2 заявляет о поддержке XPath, XInclude и других стандартов W3C.xmlgrep2 : простой и мощный поиск с XPath. Написан на Perl с использованием XML :: LibXML и libxml2.
XQSharp : поддерживает XQuery, расширение для XPath. Написано для .NET Framework.
xml-coreutils : набор инструментов Лейрда Брейера, эквивалентный GNU coreutils. Обсуждается в интересном эссе о том, что идеальный инструментарий должен включать.
xmldiff : простой инструмент для сравнения двух XML-файлов.
xmltk : похоже, не имеет пакетов в Debian, Ubuntu, Fedora или MacPort, не выпускал с 2007 года и использует непереносимую автоматизацию сборки.
xml-coreutils кажется наиболее документированным и наиболее ориентированным на UNIX.
источник
К превосходному списку Джозефа Холстена я добавляю скрипт командной строки xpath, который поставляется с библиотекой Perl XML :: XPath. Отличный способ извлечь информацию из файлов XML:
источник
-q -e
параметров. Пример, получить значение атрибута «package» из узла «manifest» в «AndroidManifest.xml»:xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
Есть также
xml2
и2xml
пара. Это позволит обычным инструментам редактирования строк обрабатывать XML.Пример. q.xml:
xml2 < q.xml
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
PS Есть также
html2
/2html
.источник
2xml
можно легко воссоздать XML из частичного (отфильтрованного)xml2
вывода.cat foo.xml | xml2 | grep /bar | 2xml
- дает вам ту же структуру, что и оригинал, но все элементы были удалены, кроме элементов "бар". Потрясающие.Вы можете использовать xmllint:
Должен быть в комплекте с большинством дистрибутивов, а также в комплекте с Cygwin.
Видеть:
источник
--xpath
аргументов дляxmllint
: manpagez.com/man/1/xmllint--xpath
- сравнительно недавнее дополнение, например, не в версиях RHEL 6xmllint
.xmllint --xpath
был введен в libxml2 2.7.7 (в 2010 году).Если вы ищете решение для Windows, Powershell имеет встроенную функциональность для чтения и записи XML.
test.xml:
Скрипт Powershell:
testNew.xml:
Источник: /server/26976/update-xml-from-the-command-line-windows
источник
xps $doc .root.one
xps $doc 'AppendChild("three")'
иxps $doc '.three.set_InnerText("And don't you forget it!")'
, что явно уступает!Также есть xmlsed & xmlgrep из NetBSD xmltools!
http://blog.huoc.org/xmltools-not-dead.html
источник
Зависит от того, что именно вы хотите сделать.
XSLT может быть способом пойти, но есть кривая обучения. Попробуйте xsltproc и обратите внимание, что вы можете передать параметры.
источник
Там же
saxon-lint
из командной строки есть возможность использовать XPath 3.0 / XQuery 3.0. (Другие инструменты командной строки используют XPath 1.0).ПРИМЕРЫ :
HTTP / HTML:
XML:
источник
Д. Богдан поддерживает репозиторий GitHub с открытым исходным кодом, в котором хранится список инструментов командной строки для инструментов структурированного текста, а также раздел для инструментов XML / HTML:
https://github.com/dbohdan/structured-text-tools#xml-html
источник
XQuery может быть хорошим решением. Он (относительно) прост в освоении и является стандартом W3C.
Я бы порекомендовал XQSharp для процессора командной строки.
источник
Сначала я использовал xmlstarlet и до сих пор его использую. Когда запрос становится сложным, мне нужна поддержка функций XML xpath2 и xquery, я обращаюсь к xidel http://www.videlibri.de/xidel.html
источник
Grep Эквивалент
Вы можете определить функцию bash, скажем «xp» («xpath»), которая оборачивает некоторый код python3. Чтобы использовать его, вам нужно установить python3 и python-lxml. Преимущества:
Это легко и эффективно использовать как это:
xp () выглядит примерно так:
Эквивалент Sed
Подумайте об использовании xq, который дает вам всю мощь jq "языка программирования". Если у вас установлен python-pip, вы можете установить xq с помощью pip install yq , тогда в следующем примере мы заменим «Keep Accounts» на «Keep Accounts 2»:
источник
JEdit имеет плагин под названием «XQuery», который обеспечивает функциональность запросов для документов XML.
Не совсем командная строка, но она работает!
источник
grep(1)
.