Узнайте, как использовать xmlstarlet для эффективной обработки полезных данных XML в ваших скриптах.
Если вы работаете в ИТ или даже считаете ИТ одним из своих основных хобби, значит, в какой-то момент вам был написан сценарий оболочки. Если вы также занимаетесь производственной деятельностью, это может стать вашей повседневной задачей. Для создания, поддержки или обновления существующего процесса.
В настоящее время более обычным явлением является взаимодействие с внешними системами, которые используют полезную нагрузку в файлах XML или даже файлах конфигурации, написанных с использованием этого формата.
Встроенный сценарий оболочки не предоставляет простой способ сделать это или поддерживает библиотеки для обработки этого, как мы можем в современных языках программирования, таких как Python, Java или Go. Итак, вероятно, вы заметили, что пишете код для анализа такого рода полезных данных. Но это не единственный способ сделать это, и мы можем (и должны!) Использовать существующие утилиты для выполнения этой работы за нас.
xmlstarlet
Я не мог найти лучшего способа объяснить, что делает xmlstarlet, что определяют владельцы в своем репозитории исходного кода:
XMLStarlet - это набор инструментов командной строки XML, который можно использовать для преобразования,
запроса, проверки и редактирования XML-документов и файлов с помощью простого набора команд оболочки
аналогично тому, как это делается для простых текстовых файлов с помощью grep. / sed / awk /
tr / diff / patch.
Итак, xmlstarlet предоставляет все возможности для выполнения всего, что вы можете себе представить, работая с XML аналогичным образом, поскольку это были простые текстовые файлы.
Установка
Процесс установки этой утилиты довольно прост и зависит от используемой вами операционной системы. Я предполагаю, что большинство сценариев оболочки предназначены для целевой машины Unix. Установить его довольно просто, так как в большинстве репозиториев пакетов есть версия этого инструмента.
Итак, если вы используете систему на основе apt, вам необходимо выполнить команду:
sudo apt-get install xmlstarlet
Если вы используете другую платформу, не беспокойтесь, потому что у них есть доступные версии для всех наиболее часто используемых операционных систем и платформ, как вы можете увидеть по ссылке ниже:
использование
Как только это программное обеспечение будет установлено, первое, что мы сделаем, это запустим его, чтобы увидеть доступные параметры.
XMLStarlet Toolkit: Command line utilities for XML Usage: D:\Data\Downloads\xmlstarlet-1.6.1-win32\xmlstarlet-1.6.1\xmlstarlet.exe [<options>] <command> [<cmd-options>] where <command> is one of: ed (or edit) - Edit/Update XML document(s) sel (or select) - Select data or query XML document(s) (XPATH, etc) tr (or transform) - Transform XML document(s) using XSLT val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG) fo (or format) - Format XML document(s) el (or elements) - Display element structure of XML document c14n (or canonic) - XML canonicalization ls (or list) - List directory as XML esc (or escape) - Escape special XML characters unesc (or unescape) - Unescape special XML characters pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879) p2x (or depyx) - Convert PYX into XML <options> are: -q or --quiet - no error output --doc-namespace - extract namespace bindings from input doc (default) --no-doc-namespace - don't extract namespace bindings from input doc --version - show version --help - show help Wherever file name mentioned in command help it is assumed that URL can be used instead as well. Type: xmlstarlet <command> --help <ENTER> for command help
Итак, первое, что нам нужно решить, это какую команду нам нужно использовать, и эти команды взаимно однозначно связаны с действием, которое нам нравится выполнять. Я сосредоточусь на основных командах в этом посте, но, как вы можете видеть, это охватывает от выбранных значений XML, обновляет его или даже проверяет его.
Пример использования 1: выбор значения.
Мы собираемся начать с самого простого варианта использования: попробуйте выбрать значение из XML (file.xml) следующим образом:
<root> <object1 name="attribute_name">value in XML</object1> </root>
Итак, начнем с самой простой команды:
./xmlstarlet sel -t -v "/root/object1" ./file.xml value in XML
Это обеспечивает значение внутри элемента object1, используя -t для определения нового шаблона и -v для определения предложения value-of. Если теперь мы хотим получить значение атрибута, мы можем сделать это очень похоже на предыдущую команду:
./xmlstarlet sel -t -v "/root/object1/@name" ./file.xml attribute_name
Вариант использования 2: Обновление значения.
Теперь мы воспользуемся другим подходом, основанным на том же файле. Мы обновим значение элемента object1, чтобы установить текст «обновленный текст».
Для этого выполняем следующую команду:
./xmlstarlet ed -u "/root/object1" -v "updated text" ./file.xml <?xml version="1.0"?> <root> <object1 name="attribute_name">updated text</object1> </root>
Резюме
xmlstarlet предоставит нам все возможности для управления чем-то сложным, поскольку есть XML и выполняет все задачи, которые вы можете себе представить, просто без необходимости кодировать всю логику синтаксического анализа. Я надеюсь, что вы стали более счастливым разработчиком с тех пор, как вам нужно управлять XML внутри сценария оболочки.